json decode/encode и кирилица

vasilev

Registered
здравейте,
интересувам се има ли някакво решенение на проблема с кодирането на кирилица със json. опитвам се да вкарам данни с кирилица в едно поле но ми изкарва знаци а не букви.
четох в нета но не намерих решение.
говоря за това:


PHP:
$array='{"1":["sofia","София"],"2":["plovdiv","Пловдив"]..}';
$json = json_decode($array);

....
$json = json_encode($json);

ако само го чета е ок. но ако искам да запиша кирилица - няма да стане.
 
charset-а на страницата, от която вкарваш данни да е utf-8,
файла да е записан с кодировка UTF-8 без BOM

какво точно изкарва, можеш ли да покажеш?
 
всичко е utf8. нямам проблеми с никой други полета никъде тоест кирилица си записвам освен с json_decode/encode.

това е което изкарва:

Код:
{"main":["ucp_main","ucpurl_main","u043du0430u0447u0430u043bu043e"]...

принципно трябва да пише "начало"
 
Ако смениш енкодинга ще стане със сигурност но може да имаш леки размествания.А пък ако ти се играе направи текста във друг файл който да бъде с енкодинг UTF-8 и ще го includнеш.
 
добре де, като го декодираш не се ли оправя? само дето пред всяко u би трябвало да има \ ... :roll:
 
не се оправя мъчих го всякак.
чета тук за някакви допълнителни функции encode_utf..
но нещо и с тях не става.


http://www.php.net/manual/en/function.json-encode.php#106417
 
http://codepad.viper-7.com/LrmcV6

Не знам какъв е проблема. При мен си работи. Не забравяй опцията JSON_UNESCAPED_UNICODE, когато енкодваш.
 
добре на мен защо ми изкарва тази грешка ..
php e 5.3.27 тоест нова.

json_encode() expects parameter 2 to be long, string given in..

и не ми изкарва кодирания array.


PHP:
header("Content-Type: text/html; charset=urf8");

$array='{"1":["1"],"2":["софия"],"3":["1"],"4":["Пловдив"],"5":["0"],"6":["1"],"7":["0"],"8":["0"],"9":["0"],"9":["0"]}';
$newjson=json_decode($array);


echo json_encode($newjson, JSON_UNESCAPED_UNICODE);
 
промених грешката в предишния пост за да не пиша пак но е писано вече:)

на по стара версия ми даваше предишната грешка.
сега го качих на гостинга където е нова и ми изкарва грешката в предишния пост.

но прочетох че функцията е за 5.4 и нагоре.

http://stackoverflow.com/questions/7381900/php-decoding-and-encoding-json-with-unicode-characters
 
хммм, аз съм останал с впечетление че беше 5.3, но явно е 5.4. Тогава говори със съпорта на хостинга :)
 
говорих но докато стане факт.. нали се сещаш:)
пускам тук един пример който става на 5.3 .. за тези които им трябва. с което приключвам и темата:)

PHP:
<?php
 function my_json_encode($arr)
 {
         //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding
         array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });
         return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');
 
}
 ?> 

echo my_json_encode(jsonarray...);
 
При мен, дори и да са ескейпнати( \uXXX ) след като си ги върна, отново си ми връща оригиналния формат.
Аз тествам на версия 5.5 де.

Ето, под версия 5.3.19 си ми работи нормално http://codepad.viper-7.com/gr3Gsi
Ескейпнати, но при връщане в нормален вид, отново си излизат нормално.
 

Back
Горе