json_encode и mysql проблема с юникодом - PullRequest
2 голосов
/ 08 декабря 2008

У меня есть следующий код JavaScript:

http://www.nomorepasting.com/getpaste.php?pasteid=22561

Что отлично работает (функция makewindows была изменена, чтобы показать, что это переменная php), однако html содержит символы Unicode и будет назначаться только символам, ведущим к первому символу Unicode. Если я создаю небольшой тестовый файл и напрямую выводю article_desc, выводится весь html, хотя вместо правильных символов отображаются метки запросов. Однако json_encode, похоже, обрезает HTML, что приводит к ошибкам.

edit: вот дамп прямо из базы данных mysql HTML, который я пытаюсь отобразить:

http://www.yousendit.com/download/TTZueEVYQzMrV3hMWEE9PQ

в источнике написано utf-8. фактический код страницы, сгенерированный выводом article_desc, находится здесь:

http://www.nomorepasting.com/getpaste.php?pasteid=22566

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

edit: это было исправлено с помощью вызова: mysql_query ('SET NAMES utf8');

Ответы [ 4 ]

3 голосов
/ 08 декабря 2008

json_encode ожидает, что строки представляют собой байтовые потоки в кодировке UTF-8. Вам придется либо использовать строки в кодировке utf-8 для внутреннего использования (в любом случае это единственный способ работать с символами Юникода в PHP), либо использовать другую библиотеку для генерации json.

2 голосов
/ 02 февраля 2011

У меня была такая же проблема. Я использую Zend_Db / mysqli, и моя база данных на самом деле UTF8.

Я решил проблему, попросив адаптер базы данных использовать UTF8:

$conf->db->params['charset'] = 'UTF8';

Если вы используете PDO вместо mysqli, вы можете сделать это следующим образом:

$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$conf->db->params['driver_options'] = $pdoParams;

Если вы не используете Zend_Db, но используете mysqli, вы можете посмотреть на http://php.net/manual/en/mysqli.set-charset.php.

Источник: http://www.zfsnippets.com/snippets/view/id/13

1 голос
/ 19 января 2009
json_encode( utf8_encode( $Content ) );

Это решит вашу проблему.

0 голосов
/ 08 декабря 2008

я не думаю, что вам нужен json_encode. json_encode кодирует PHP-массивы и объекты в читаемый формат JavaScript. Если вы отправляете простой текст или HTML в ajax, вам не нужен json_encode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...