Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› Кодирование Unicode в php
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 июня 2014 03:37 · Поправил: Isaev
· Личное сообщение · #1

Столкнулся с проблеммкой
простой пример:
Строка "André" последний символ, если смотрим в WinHex например, выглядит как C3 A9
Это правильное значиние и оно мне и нужно
Почему, в php при переводе в json он принимает совсем другой код?
Code:
  1. $str='André'; // это уже форум подставил код вместо символа
  2. echo json_encode($str);

Вывод: "Andr\u00e9"
Как это поправить?
Хотелось бы получить что-то типа такого: Andr%C3%A9

PS: urlencode помог... А если кто знает почему всё таки в JSON меняются коды, расскажите пожалуйста

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 29 июня 2014 09:35 · Поправил: Veliant
· Личное сообщение · #2

либо попробывать JSON_UNESCAPED_UNICODE вторым параметром json_encode

| Сообщение посчитали полезным: Isaev


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 июня 2014 15:38 · Поправил: Isaev
· Личное сообщение · #3

Veliant, там при кодировании переводится в JSON, прогоняется через регулярку, потом берётся от него md5... JSON_UNESCAPED_UNICODE пробовал, он тогда оставляет тот символ как есть и md5 выходит кривое(или может дело вовсе не в этом)

Добавлено спустя 16 минут
Вот так там всё выглядело:

str1 = '{"info":{"reffer":"554332","name":"Tréck Davidson","sex":"2","friends":12}}';
str2 = src.com.serialization.json.JSON.serialize(str1);
str2 = str2.replace(new RegExp("\ \ \ \ \ \ \ \ ", "g"), "||"); // Пробелы убрать
str2 = utils.MD5.encrypt(str2);

это ActionScript, надо перевести в php
Но в php похоже json_encode работает не так, как в AS JSON.serialize, и регулярки даже получается работают не так
По логике, как я понимаю, serialize экранирует слешами ковычки и, возможно, заменит пробелы и unicode, а регулярка дальше как работает? Слеши экранируют друг друга, значит остаётся 4 из 8... Потом как мне объяснили в AS(а может и везде так) эти 4 слеша снова друг друга экранируют и остаётся 2!
Такого я никогда не слышал и тут немного потерялся... Что же оно делает? меняет "\ \ "(Пробелы убрать) на "||"?
Но в исходных данных никогда не будет \ по определению, тогда эта регулярка никогда ничего не поменяет?
ps: в php такая регулярка вообще не проходит по синтаксису

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 30 июня 2014 05:06 · Поправил: Zorn
· Личное сообщение · #4

Регулярка не нужна
$str2 = str_replace('\ \ \ \ ','||',$str2); //Пробелы убрать

А что в str2 после JSON.serialize ?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 30 июня 2014 05:24
· Личное сообщение · #5

Zorn пишет:
Регулярка не нужна

т.е. я правильно понял, она бы работала только если в исходных данных попался '\ '?
Тогда после serialize он бы стал двойным и тогда бы его заменило, так?
Zorn пишет:
А что в str2 после JSON.serialize ?

самому интересно, как раз пытаюсь собрать это во флеше, чтобы посмотреть)

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 30 июня 2014 08:31
· Личное сообщение · #6

В AS не шарю, но вроде как там обычная замена двойных бекслешей на двойные палки во всем тексте (флаг "g"), что собственно и делает пхпэшный str_replace.
Первые экраны съедаются самой объявленной строкой (в регулярку подается 4 бекслеша) вторая половина съедается регуляркой. Думаю как то так.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 01 июля 2014 04:26
· Личное сообщение · #7

Zorn пишет:
А что в str2 после JSON.serialize ?

просто экранируются кавычки, остальное всё остаётся как есть, потому совет от Veliant тут вполне сработает)

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh



 eXeL@B —› Программирование —› Кодирование Unicode в php
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати