Я занимаюсь разработкой арабского веб-сайта. Однако я использую AJAX для сохранения некоторого текста в моей базе данных. AJAX отлично работает со мной. Моя проблема заключается в том, что когда я сохраняю данные в своей базе данных и пытаюсь распечатать их на своем экране, он возвращает странный текст. Я использовал функцию PHP mb_detect_encoding, чтобы определить, как база данных имеет дело с текстом. Функция вернула UTF-8. Поэтому я использовал iconv («windows-1256», «UTF-8», $ row ["text"]) для печати текста на экране, но он все еще возвращает эту странную вещь. Пожалуйста, дайте руку Спасибо
пожалуйста, взгляните на эту тему (и сначала используйте поиск, прежде чем публиковать вопрос).
в вашем случае, я думаю, вы забыли установить chorrect charset для подключения к базе данных (используя оператор SET NAMES
или mysql_set_charset () ), но это трудно сказать.
это цитата из chazomaticus , которая дала прекрасный ответ в понравившемся потоке, перечисляя все моменты, о которых вы должны заботиться:
Место хранения:
- Укажите
utf8_unicode_ci
(или эквивалентную) сортировку для всех таблиц и текстовых столбцов в вашей базе данных. Это делает MySQL физически хранить и извлекать значения изначально в UTF-8.индексирование:
- В PHP, в какой-либо используемой DB-оболочке, вам нужно установить charset для соединения с utf8. Таким образом, MySQL не делает преобразование из своего родного UTF-8, когда он передает данные на PHP. * Обратите внимание: если вы не используете оболочку DB, вам, вероятно, придется выдать запрос, чтобы сообщить MySQL, чтобы он дал вам результаты в UTF-8:
SET NAMES 'utf8'
(как только вы подключитесь).Доставка:
- Вы должны сказать PHP, чтобы доставить соответствующие заголовки клиенту, поэтому текст будет интерпретироваться как UTF-8. В PHP вы можете использовать опцию
default_charset
php.ini или вручную самостоятельно выпускать заголовокContent-Type
, что является просто большей работой, но имеет тот же эффект.Подача конкурсных предложений:
- Вы хотите, чтобы все данные, отправленные вам браузерами, были в UTF-8. К сожалению, единственный способ надежно сделать это – добавить атрибут
accept-charset
ко всем тэгам<form>
:<form ... accept-charset="UTF-8">
.- Обратите внимание, что спецификация HTML W3C гласит, что клиенты «должны» по умолчанию отправлять формы обратно на сервер в любой кодировке, обслуживаемой сервером, но это, по-видимому, только рекомендация, следовательно, необходимость быть явным для каждого
<form>
.- Хотя на этом фронте вы все равно хотите проверить каждую поданную строку как действительную UTF-8, прежде чем пытаться ее сохранить или использовать в любом месте. PHP
mb_check_encoding()
делает трюк, но вы должны использовать его религиозно.Обработка:
- Это, к сожалению, тяжелая часть. Вы должны убедиться, что каждый раз, когда вы обрабатываете строку UTF-8, вы делаете это безопасно. Самый простой способ сделать это – широко использовать
mbstring
PHPmbstring
.- Строковые операции PHP НЕ по умолчанию безопасны для UTF-8. Есть некоторые вещи, которые можно смело выполнять с обычными строковыми операциями PHP (например, конкатенация), но для большинства вещей вы должны использовать эквивалентную функцию
mbstring
.- Чтобы узнать, что вы делаете (читайте: не испортите его), вам действительно нужно знать UTF-8 и как он работает на самом низком возможном уровне. Проверьте какие-либо ссылки с utf8.com на наличие хороших ресурсов, чтобы узнать все, что вам нужно знать.
- Кроме того, мне кажется, что это должно быть сказано где-то, хотя это может показаться очевидным: каждый PHP или HTML-файл, который вы будете обслуживать, должен быть закодирован в действительном UTF-8.
обратите внимание, что вам не нужно использовать utf-8 – важная часть состоит в том, чтобы использовать ту же кодировку везде , независимо от того, какая кодировка может быть. но если вам все равно нужно что-то менять, используйте utf-8.
Я рекомендую изменить ваши веб-страницы на UTF-8.
В идеале, вы должны использовать ту же кодировку (UTF-8?) На своих веб-страницах, базе данных и JavaScript / AJAX . Многие люди забывают устанавливать кодировку для запросов / ответов AJAX, что дает вам искаженные данные в некоторых браузерах ( кашель ).
Спасибо, ребята, за вашу поддержку, и извините oezi за эту путаницу. Я действительно сделал обыск и не нашел ответа. Тем не менее, теперь он отлично работает со мной. Я собираюсь объяснить, что я сделал, чтобы заставить его работать, чтобы кто-нибудь мог извлечь из этого выгоду: – Я сделал свои таблицы charset в utf8_unicode_ci. – Чтобы отправить данные, я использовал AJAX с кодировкой по умолчанию UTF-8. – Когда я получаю данные из своей БД, я использовал функцию iconv как следующий символ («UTF-8», «windows-1256», $ row [«text»]), и он работает. Я надеюсь, что ясное