mysql_real_escape_string не выходит " - PullRequest
3 голосов
/ 09 декабря 2011

В PHP я экранирую символы перед вставкой в ​​базу данных MySQL, используя mysql_real_escape_string

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

При сохранении двойные кавычки сохраняются как экранированные с \.Я не хочу этого, поскольку некоторые данные представляют собой HTML и могут содержать теги типа <a href="www.stackoverflow.com"> и т. Д., Которые будут сохранены как <a href=\"www.stackoverflow.com\">, а затем неправильно отображаются в настройке WordPress.

Я прочиталв другом месте в stackoverflow, чтобы избежать экранирования двойных кавычек, сначала нужно вставить (как указано выше), затем выбрать и снова вставить в таблицу.

Есть ли способ решить эту проблему без необходимости выбора и повторной вставки?

Спасибо (примечание: база данных, которую я использую, имеет формат utf-8)

Ответы [ 2 ]

4 голосов
/ 09 декабря 2011

Возможно, на вашем сервере включены magic_quotes.Проверьте это с помощью

var_dump( get_magic_quotes_gpc() );

В противном случае, это, вероятно, то, что вы делаете заранее или что делает ваша библиотека db.mysql_real_escape_string экранирует только строку, поэтому ее можно безопасно использовать в запросе SQL.Это не может помочь, если строка уже экранирована для начала.

2 голосов
/ 09 декабря 2011

Вы всегда можете убрать косую черту на выходе, используя http://php.net/manual/en/function.stripslashes.php

например:

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

или просто удалите все экранированные двойные кавычки:

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