Что я должен сделать, чтобы сохранить все виды пользовательских символов ввода в базе данных MySQL? - PullRequest
3 голосов
/ 08 августа 2010

Я создаю веб-приложение с использованием PHP и MySQL.Я хочу, чтобы он мог сохранять любые вводимые пользователем символы, как английские, так и неанглийские символы, например, арабский или японский.

Что я должен сделать для этого?

Ответы [ 3 ]

2 голосов
/ 08 августа 2010

Вам нужно использовать Unicode.Прочтите раздел руководства MySQL по Unicode и Джоэлу Спольски Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без извинений!) .

Вы, вероятно, захотите установить набор символов (кодировку) рассматриваемой таблицы / столбцов в utf8.Вам также нужно будет установить кодировку ваших файлов HTML / PHP в UTF-8.Вы можете сделать это с метатегом в

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Вы также можете установить заголовок Content-Type:, который отправляет Apache / PHP.

Даже после установки этого выможет по-прежнему сталкиваться с проблемами браузера.Например, Internet Explorer не всегда может использовать UTF-8, поэтому Rails 3 пришлось обойти .

2 голосов
/ 08 августа 2010

Для MySQL сначала необходимо определить данные с помощью набора символов UTF8:

CREATE DATABASE xx [...] DEFAULT CHARACTER SET 'utf8' DEFAULT COLLATE utf8_general_ci

А при создании соединений с базой данных из PHP вам просто нужно запустить быструю команду после ее открытия:

SET NAMES 'utf8'

В качестве альтернативы, если у вас есть доступ к MySQL my.ini, вы можете просто добавить это в конфигурацию и забыть выше:

skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8

(обратите внимание, что это не php.ini, а ini MySQL)


Для PHP, если вам нужно манипулировать многобайтовыми строками: убедитесь, что у вас активна библиотека mbstring , а затем измените вызовы функций string & regexp на использование эквивалента mb_ *.

Кроме того, убедитесь, что ваш редактор сохраняет в UTF8, чтобы все было согласованно. Eclipse / PDT упрощает, по крайней мере (проект -> свойства -> кодировка текстового файла).


Наконец, обработка культурных различий: это сложная часть. Иногда это так же просто, как установить p { direction: rtl; } в CSS, а в других случаях вы будете рвать на себе волосы, пытаясь расшифровать алфавит, который пользователь только что опубликовал. Это зависит от того, что вы делаете с разными языками.

1 голос
/ 08 августа 2010

Для начала убедитесь, что вы прочитали о внедрении SQL.Вы должны принять строгие меры предосторожности, чтобы вы могли безопасно кодировать вход.Обычно вы фильтруете / отбрасываете небезопасный контент.Так что если вам действительно нужно это разрешить, тогда вам нужно быть осторожным, чтобы вам было нелегко взломать себя.

По сути, вам нужна такая же защита, в то же время допуская "опасный" контент, такой какв качестве примеров исходного кода, которые используют подобные сайты.Также системы, на которые обычно нацелены, такие как PHPBB2, WordPress, Wiki и т.д ..

Я думаю, что ваша задача сложнее, если данные должны быть доступны для поиска.

Если вы используете PHP, функция mysql_real_escape_string () выглядит хорошо: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php В противном случае используйте нечто подобное.

...