Mysql хранит цитаты как ' - PullRequest
0 голосов
/ 18 апреля 2010

У меня есть некоторый код PHP, который хранит все, что напечатано в текстовом поле в базе данных. Если я наберу bob's apples, он будет сохранен в базе данных как bob's apples.

В чем может быть проблема?

Таблица, хранящая это, имеет параметры сортировки latin1_swedish_ci.

Ответы [ 3 ]

5 голосов
/ 18 апреля 2010

Похоже, ваш код PHP преобразует специальный символ в HTML сущности, используя htmlentities . Вы можете использовать функцию html_entity_decode , чтобы вернуть исходную строку.

$a = "bob's apples";
echo htmlentities($a,ENT_QUOTES);                                // bob's apples
echo html_entity_decode(htmlentities($a,ENT_QUOTES),ENT_QUOTES); //bob's apples
3 голосов
/ 18 апреля 2010

Ваш HTML экранирует строки (с htmlspecialchars() или htmlentities()) перед вставкой в ​​базу данных, что является плохой идеей. Вы можете использовать html_entity_decode() для восстановления урона, но лучше этого не делать.

Время, когда вы должны экранировать HTML, подходит перед тем, как вы выводите данные в браузер, обычно с выбранными строками из запросов SELECT:

Сделайте Google для XSS.

Не то, чтобы экранирование HTML не имело ничего общего с «добавлением слешей», которое вы должны делать перед вставкой строки в базу данных с помощью mysql_real_escape_string(). Это сделано для того, чтобы избежать уязвимостей SQL-инъекций.

<?php $row =  mysql_fetch_row($result);
echo htmlspecialchars($row['someField']); // good place to escape HTML.

<?php $str = htmlspecialchars($_GET['foo']); // bad place to escape HTML.
$str = mysql_real_escape_string($str); // good place to escape for DB.
$q = 'INSERT INTO .... VALUES (' . $str . ')';
mysql_query($q);
0 голосов
/ 18 апреля 2010

Функция htmlspecialchars () с ENT_QUOTES для параметра secondde также преобразует одинарную кавычку в &#039;

htmlspecialchars($a, ENT_QUOTES);
...