mysql_real_escape_string wird nicht maskiert “

Lesezeit: 2 Minuten

Benutzeravatar von Usering
Benutzer

In PHP maskiere ich Zeichen, bevor ich sie mit mysql_real_escape_string in eine MySQL-Datenbank einfüge

$array_to_insert = array_map('mysql_real_escape_string', $my_arr);
$mysql->setTbl("mytable");
$id = $mysql->insertArray($array_to_insert);

Beim Speichern werden doppelte Anführungszeichen als Escapezeichen mit a gespeichert \. Ich möchte dies nicht, da einige der Daten HTML sind und Tags wie enthalten können <a href="www.stackoverflow.com"> usw., die gespeichert werden als <a href=\"www.stackoverflow.com\"> und dann in einem WordPress-Setup falsch angezeigt.

Ich habe an anderer Stelle auf Stackoverflow gelesen, dass man, um die doppelten Anführungszeichen nicht zu umgehen, zuerst einfügen muss (wie oben), dann auswählen und erneut in eine Tabelle einfügen muss.

Gibt es eine Möglichkeit, dieses Problem zu lösen, ohne auswählen und erneut einfügen zu müssen?

Danke (Hinweis: Die Datenbank, die ich verwende, ist im utf-8-Format)

  • Wo hast du das Einfügen/Auswählen/Einfügen gelesen? Das ist eine schreckliche Lösung – Simshauns Antwort sollte es fast abdecken, da dies nach einem doppelten Fluchtproblem riecht.

    – HorusKol

    8. Dezember 2011 um 23:19 Uhr


Möglicherweise ist auf Ihrem Server magic_quotes aktiviert. Überprüfen Sie es mit

var_dump( get_magic_quotes_gpc() );

Andernfalls ist es wahrscheinlich etwas, das Sie vorher tun oder das Ihre Datenbankbibliothek tut. mysql_real_escape_string maskiert die Zeichenfolge nur, damit sie sicher in einer SQL-Abfrage verwendet werden kann. Es kann nicht helfen, wenn die Zeichenfolge von Anfang an bereits maskiert ist.

  • magic_quotes wurde ab PHP 5.3.0 VERWORFEN und ab PHP 5.4.0 ENTFERNT. Das ist nicht das Problem!

    – Alex G

    10. August 2014 um 4:11 Uhr

Benutzeravatar von Magento Guy
Magento-Typ

Sie könnten auf dem Weg nach draußen immer Schrägstriche entfernen http://php.net/manual/en/function.stripslashes.php

zum Beispiel:

$sql = "SELECT * FROM table_name";
$result = mysql_query($sql) or mysql_error();
while ($output = mysql_fetch_assoc($result)) {
  echo stripslashes($output['column_name']);
}

Alternativ entfernen Sie einfach alle doppelten Anführungszeichen mit Escapezeichen:

echo str_replace('\"', '"', $output['column_name']);

1427450cookie-checkmysql_real_escape_string wird nicht maskiert “

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy