Вопрос по mysql, php – Правильный метод PHP для хранения специальных символов в БД MySQL

6

Используя PHP, как лучше всего хранить специальные символы (например, следующие) в базе данных MSQUL, чтобы избежать инъекций.

« " ' é à ù

Вот как я это делаю сейчас:

$book_text=$_POST['book_text'];
$book_text=htmlentities($book_text, "ENT_QUOTES");
$query=//DB query to insert the text

Затем:

$query=//DB query to select the text
$fetch=//The fetch of $book_text
$book_text=html_entity_decode($book_text);

Таким образом, весь мой текст отформатирован в HTML-объектах. Но я думаю, что это занимает много места в базе данных. Так есть ли лучший способ?

utf8 твой друг user557846
"ENT_QUOTES" должно бытьENT_QUOTES (без кавычек), потому что это предопределенная константа PHP. И я подумал, что вы можете поместить его в БД в необработанном виде, и когда вы хотите повторить его, вы используетеhtmlentities Wouter J

Ваш Ответ

4   ответа
0

также вы можете использовать Подготовленные заявления, если вы сильно беспокоитесь об уколах ...

http://www.linearchat.co.uk/2011/08/why-prepared-statements-in-mysql-are-a-good-thing/

также

http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html

6

utf8 кодирование для хранения этих значений.

Избежатьinjections mysql_real_escape_string() (или подготовленные заявления).

Беречь отXSS htmlspecialchars.

Error: User Rate Limit Exceeded Antonio Ciccia
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

ваш вопрос можно обобщить для обработки и хранения UTF8 с PHP и MySQL.

Чтобы быть в безопасности от SQL-инъекций, вы должны использовать подготовленные операторы.MySQLi а такжеPDO водители оба поддерживают их.

Подготовленные операторы автоматически цитируются драйвером, поэтому вам не нужно об этом беспокоиться.

Ваши таблицы базы данных должны быть созданы с набором символовutf8 иutf8_general_ci сверка. Эти настройки my.cnf гарантируют, что ваш сервер MySQL будет работать UTF8 на протяжении всего:

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'

[client]
default-character-set=utf8

Имейте в виду, что PHP обычно не знает о UTF-8, поэтому вам следует позаботиться об использованииiconv или жеmbstring библиотеки для обработки строк. УвидетьPHPWACT для хорошего обзора.

Убедитесь, что внутренний набор символов PHP установлен в Юникод

iconv_set_encoding('internal_encoding', 'UTF-8');
mb_internal_encoding('UTF-8');

Вы также должны убедиться, что браузер знает кодировку, отправив правильный заголовок или добавив<meta> тег для кодировки.

Это должно сделать это.

0

сь все перепутать.
Давайте попробуем разобраться.

Using PHP, what is the best way to store special characters (like the following) in a MSQUL database, to avoid injections.

Это несопоставимые вопросы. Хранение специальных символов - это одно, а избегание инъекций - другое. совершенно другой.

$book_text=htmlentities($book_text, "ENT_QUOTES");

это самая забавная часть. хотя он предназначен для защиты ваших запросов, на самом деле он ничего не делает. Поскольку вместо константы ENT_QUOTES, значение которой равно 3, вы используете строку ENT_QUOTES, числовое значение которой равно 0, то есть вы не устанавливаете флаг.

Но даже если вы правильно установите этот флаг, он не защитит вас автоматически. Потому что код инъекции может не содержать специальных символов.

Чтобы избежать уколов, нужно следовать целымset of rulesа не одна простая функция "make_my_data_safe ()". Там нет волшебной палочки.
Увидетьthis my answer для деталей.

Что касается специальных символов, то все просто. Единственная проблема в том, что НЕТ сплошных специальных символов. Естьdifferent специальные символы для разных сред.

' have meaning for the database and HTML <> have meaning for the HTML only é à ù have meaning for the HTML only, depends on the encoding.

у вас есть вы используете разные правила форматирования для каждого случая. Отличается, не один для всех.

использовать & # xE9; & # XE0; & # XF9; символы с HTML вы должны установить правильный заголовок HTTP. использовать & # xE9; & # XE0; & # XF9; с базой данных вы должны установить кодировку таблицы в utf8 и кодировку соединения в utf 8

Error: User Rate Limit Exceeded Antonio Ciccia

Похожие вопросы