Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: json_encode абракадабра русских символов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Rooner
Отправлено: 06 Декабря, 2012 - 18:54:49
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Использую стандартную функцию jquery ajax отправляю данные и получаю результат.
Как вернуть скрипту русский текст, если json_encode его косячит? Мб другие методы посоветуете?

Вот так я пытаюсь сконвертировать русский текст, и возвращаю его скрипту, НО все ковычки экранируются, и текст становится бесполезен.
PHP:
скопировать код в буфер обмена
  1.  echo jdecoder(json_encode('<div class="err">Заполните поле "Полный текст"</div>'));

PHP:
скопировать код в буфер обмена
  1. // декодируем русские символы
  2. function jdecoder($json_str) {
  3.   $cyr_chars = array (
  4.     '\u0430' => 'а', '\u0410' => 'А',
  5.     '\u0431' => 'б', '\u0411' => 'Б',
  6.     '\u0432' => 'в', '\u0412' => 'В',
  7.     '\u0433' => 'г', '\u0413' => 'Г',
  8.     '\u0434' => 'д', '\u0414' => 'Д',
  9.     '\u0435' => 'е', '\u0415' => 'Е',
  10.     '\u0451' => 'ё', '\u0401' => 'Ё',
  11.     '\u0436' => 'ж', '\u0416' => 'Ж',
  12.     '\u0437' => 'з', '\u0417' => 'З',
  13.     '\u0438' => 'и', '\u0418' => 'И',
  14.     '\u0439' => 'й', '\u0419' => 'Й',
  15.     '\u043a' => 'к', '\u041a' => 'К',
  16.     '\u043b' => 'л', '\u041b' => 'Л',
  17.     '\u043c' => 'м', '\u041c' => 'М',
  18.     '\u043d' => 'н', '\u041d' => 'Н',
  19.     '\u043e' => 'о', '\u041e' => 'О',
  20.     '\u043f' => 'п', '\u041f' => 'П',
  21.     '\u0440' => 'р', '\u0420' => 'Р',
  22.     '\u0441' => 'с', '\u0421' => 'С',
  23.     '\u0442' => 'т', '\u0422' => 'Т',
  24.     '\u0443' => 'у', '\u0423' => 'У',
  25.     '\u0444' => 'ф', '\u0424' => 'Ф',
  26.     '\u0445' => 'х', '\u0425' => 'Х',
  27.     '\u0446' => 'ц', '\u0426' => 'Ц',
  28.     '\u0447' => 'ч', '\u0427' => 'Ч',
  29.     '\u0448' => 'ш', '\u0428' => 'Ш',
  30.     '\u0449' => 'щ', '\u0429' => 'Щ',
  31.     '\u044a' => 'ъ', '\u042a' => 'Ъ',
  32.     '\u044b' => 'ы', '\u042b' => 'Ы',
  33.     '\u044c' => 'ь', '\u042c' => 'Ь',
  34.     '\u044d' => 'э', '\u042d' => 'Э',
  35.     '\u044e' => 'ю', '\u042e' => 'Ю',
  36.     '\u044f' => 'я', '\u042f' => 'Я',
  37.  
  38.     '\r' => '',
  39.     '\n' => '<br />',
  40.     '\t' => ''
  41.   );
  42.  
  43.   foreach ($cyr_chars as $key => $value) {
  44.     $json_str = str_replace($key, $value, $json_str);
  45.   }
  46.   return $json_str;
  47. }
 
 Top
caballero
Отправлено: 06 Декабря, 2012 - 19:11:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




json поддерживает только UTF8
переведи туда же остальные файлы и не надо ничего конвертировать


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
esterio
Отправлено: 06 Декабря, 2012 - 19:12:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




зачем jdecoder?
http://php.net/manual/ru/functio....json-encode.php
Цитата:
Функция работает только с кодированными в UTF-8 данными.

А у Вас кодировка?

(Отредактировано автором: 06 Декабря, 2012 - 19:13:03)

 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 19:17:21
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




caballero, esterio, у меня все файлы в UTF-8, и возвращается кривой текст. Мб нужно указать функции json_encode какую-нибудь опцию? Мб в настройках denwer'a что-то не то?
 
 Top
esterio
Отправлено: 06 Декабря, 2012 - 19:18:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




попробуйте iconv сначала для
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div class="err">Заполните поле "Полный текст"</div>
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 19:22:54
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Кодировка везде указана UTF-8:
В php.ini стоит default_charset = "utf-8"
В хэдэре стоит <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
В .htaccess стоит adddefaultcharset utf-8
В подключении к БД стоит mysql_query("SET NAMES 'UTF8'");
Сами файлы имеют кодировку UTF-8 буз DOM смотрел через NotePad++
Ну и в браузере кодировка определяется как UTF-8
(Добавление)
esterio, что такое iconv?
(Добавление)
Попробовал на пустой странице вывести
PHP:
скопировать код в буфер обмена
  1. echo json_encode('<div class="err">Заполните поле "Полный текст"</div>');

Получил:
CODE (html):
скопировать код в буфер обмена
  1. "
  2. \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \"\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\"<\/div>"

(Добавление)
Функция iconv не помогла, ведь текст итак в UTF-8
 
 Top
caballero
Отправлено: 06 Декабря, 2012 - 19:41:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Кодировка везде указана UTF-8:

кроме того места где надо указывать в первую очередь

PHP:
скопировать код в буфер обмена
  1. Header("Content-Type: text/html;charset=UTF-8");

(Отредактировано автором: 06 Декабря, 2012 - 19:41:58)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
esterio
Отправлено: 06 Декабря, 2012 - 19:45:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Цитата:
"
\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \"\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\"<\/div>"

так ето екранировання строка. Попробуйте потом json_decode, работать будет. И аяксом передавать будет правильно.
(Добавление)
чото не работает, хотя все верно вроде как.
http://www[dot]functions-online[dot]com/json_decode[dot]html
Поексперементируйте тут, попробуйте массив загнать
(Добавление)
Правильной результат
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div class=\"err\">\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \"\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\"<\/div>
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 19:55:33
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




caballero, хэдэр надо в php скрипте, который возвращает результат писать? Вот так?
PHP:
скопировать код в буфер обмена
  1.   Header("Content-Type: text/html;charset=UTF-8");
  2.   echo json_encode('<div class="err">Заполните поле "Полный текст"</div>');

esterio, json_decode в js коде? он не понимает такую функцию(
 
 Top
esterio
Отправлено: 06 Декабря, 2012 - 20:00:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Rooner пишет:
esterio, json_decode в js коде? он не понимает такую функцию(

Так ето ПХП функция.

В JS нужно сделать JSON.parse(result); или eval('{' + result + '}');

jQuery такое делает почти автоматически
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 20:15:52
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




esterio, большое спасибо, то что я искал, решение моей мечты Радость
Цитата:
jQuery такое делает почти автоматически

А поподробнее? есть какая то функция?
 
 Top
esterio
Отправлено: 06 Декабря, 2012 - 21:26:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




там полностю организирован аякс
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Декабря, 2012 - 09:06:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. var response = 'abracadabra';
  2. response = eval('(' + response + ')');
  3. console.log(response);
 
 Top
Rooner
Отправлено: 08 Декабря, 2012 - 09:59:14
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




А в чем разница между JSON.parse(result); и eval('{' + result + '}')?
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Декабря, 2012 - 10:19:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




А что Вы ожидали получить ?
esterio пишет:
В JS нужно сделать JSON.parse(result); или eval('{' + result + '}');

Может достаточно указать тип получаемых данных в запросе ?)
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB