2010-09-01 3 views
1

Ну, я получил БД MySQL, зашифрованную utf8_unicode_ci, и он работает как шарм с текущей (написанном в код воспламенитель)я получил странные символы извлекая данные из БД MySQL

Сейчас я разрабатываю новое приложение для PHP, и когда я пытаюсь восстановить данные, несколько символов не читаются - символы отображаются в DB с помощью phpMyAdmin, но когда я пытаюсь разместить его на веб-странице, это стало похоже на «ROLA 60».

Эти символы испанские буквы, такие, как я, а, обслужив ... или ASCII-коды, как €, Ø ...

Где проблема? Я установил страницу как meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8", я пробовал функцию mysql_set_charset() и все равно ничего.

Есть ли опыт с такими проблемами?

+0

попробовать mysql_set_charset() снова –

ответ

3

Я заметил эту точную проблему в приложениях, управляемых базой данных, и мне потребовалось много времени, чтобы ее решить!

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

Символ вопроса и его варианты возникают, когда браузер не понимает, какой символ он передается.

Убедитесь, что наборы символов матч в следующих местах:

  1. HTML, головной секции.
  2. Сама сортировка базы данных - это можно установить в phpMyAdmin при создании новой таблицы или изменить схему существующей таблицы.
  3. Самая пропущенная установка набора символов: Значение «default_charset» файла php.ini (может быть установлено через PHP-скрипт или файл httpd.conf).

Судя по вашему сообщению, похоже, что ваша настройка PHP может быть настроена на использование другого default_charset. Это означает, что ваша база данных будет хранить символы в порядке и будет отправлять символы штрафа в ваш скрипт, но сам скрипт PHP не будет знать, что делать с символом, и, таким образом, выводит в браузер как раздражающий символ знака вопроса ,

Попробуйте изменить значение php.ini на одну и ту же кодировку, и вы можете быть удивлены, увидев, что символы отображаются отлично! Если у вас нет доступа к php.ini, вы можете изменить значение с помощью следующей функции:

ini_set("default_charset", "UTF-8"); 

Надеется, что это помогает.

+0

Вы не понимаете эти вещи. default_charset в php.ini не имеет ничего общего с базой данных. и глупый метатег в голове HTML ничего не влияет. –

+1

Решенный! Благодаря! – Arthur

+0

OMG. еще хуже. PHP никогда ничего не делает для символов, которые он получает из базы данных. почему бы не прочитать ваши комментарии php.ini до публикации такой глупости? –

2

если mysql_set_charset() не работает, попробуйте выполнения

mysql_query('SET NAMES utf8'); 

после установления соединения.

2

Любые проблемы требуют только одного опыта: понимание того, что вы делаете и отладки. Очень редкие навыки в наши дни, благодаря сайтам, таким как stackoverflow.

есть 3 уровня, где кодирование ввязывается:

  • уровня базы данных
  • уровня сервера скрипта.
  • html уровень страницы.

каждый должен быть проверен соответственно.

чтобы проверить уровень HTML очень просто. Просто нажмите «Просмотр» в вашем браузере, затем «кодирование» и посмотрите, какой из них отмечен. Если это правильно, вы в порядке. Если нет - неверно HTTP-заголовок, который отправляется, и вы должны сделать это правильно

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

  • mysql_set_charset() - предпочтительное один
  • SET NAMES запрос

к сведению, что UTF-8 кодирование с именем utf8 в MySQL.

база данных уровень похоже O.K. в твоем случае.

+1

+1: для 'mysql_query ('SET NAMES utf8');' query. Это решает эту проблему в 99% случаев. – shamittomar

+1

@shamittomar на самом деле это решение хуже, чем mysql_set_charset(), если вы используете функцию mysql_real_escape_string. Потому что SET NAMES делает функции этой функции бесполезными –

0

mysql_query('SET NAMES utf8'); работы при просмотре через Chrome, но не FF или IE

Смежные вопросы