|
|
|
| Давно меня мучает эта проблема, ещё со времен написания чата. Собственно, мой способ прост и туп до безобразия - в JS я кодирую текст при помощи escape(), а в PHP-скрипте у меня написана функция с массивом, содержащим декодировку всех русских букв, если говорить языком регулярных выражений - [а-Я]. Но опыт использования чата показывает, что конечно же не только одни кириллические символы кодируются escape-функцией, но и много спец-символов, таких как, например, знак копирайта (©) и много еще чего можно сотворить при помощи Alt+Numpad. Так как же быть ? Гугл дал знать, что в PHP нет конкретной функции, декодирующей шифр escape()-функции JS. А писать и использовать функцию с массивом всех символов кодировки будет не очень разумно. Быть может, есть у escape-кодировки какая-то закономерность символов ? Может возможно как-то заменять при помощи preg_replace (рег. выр.) кодированные символы на char($i) ? Вот такой сабж предлагаю обсудить. | |
|
|
|
|
|
|
|
для: DDK
(18.07.2006 в 11:17)
| | В каком виде Вы принимаете закодированную строку от JS?
И в каком Вы хотите её получить? | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 11:29)
| | - | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 11:29)
| | Так кодирую строку в JS перед отправкой:
А так раскодирую её в PHP:
<?php
function utf_win2($s){
$in=array(
"%u0430", "%u0431", "%u0432",
"%u0433", "%u0434", "%u0435",
"%u0436", "%u0437", "%u0438",
"%u0439", "%u043A", "%u043B",
"%u043C", "%u043D", "%u043E",
"%u043F", "%u0440", "%u0441",
"%u0442", "%u0443", "%u0444",
"%u0445", "%u0446", "%u0447",
"%u0448", "%u0449", "%u044A",
"%u044B", "%u044C", "%u044D",
"%u044E", "%u044F", "%u0451",
"%u0410", "%u0411", "%u0412",
"%u0413", "%u0414", "%u0415",
"%u0416", "%u0417", "%u0418",
"%u0419", "%u041A", "%u041B",
"%u041C", "%u041D", "%u041E",
"%u041F", "%u0420", "%u0421",
"%u0422", "%u0423", "%u0424",
"%u0425", "%u0426", "%u0427",
"%u0428", "%u0429", "%u042A",
"%u042B", "%u042C", "%u042D",
"%u042E", "%u042F", "%u0401");
$out=array(
"а", "б", "в", "г", "д", "е",
"ж", "з", "и", "й", "к", "л",
"м", "н", "о", "п", "р", "с",
"т", "у", "ф", "х", "ц", "ч",
"ш", "щ", "ъ", "ы", "ь", "э",
"ю", "я", "ё", "А", "Б", "В",
"Г", "Д", "Е", "Ж", "З", "И",
"Й", "К", "Л", "М", "Н", "О",
"П", "Р", "С", "Т", "У", "Ф",
"Х", "Ц", "Ч", "Ш", "Щ", "Ъ",
"Ы", "Ь", "Э", "Ю", "Я", "Ё");
$s=str_replace($in,$out,$s);
return $s;
}
?>
| Как видно, раскодировщик далеко не совершенен, т.к. весьма словарь его весьма невелик.
ЗЫ: Хотелось бы узнать, как связан порядковый номер символа в таблице символов (char) с тем номером, который идёт после %u в кодировке. | |
|
|
| |
|
|
|
|
для: Crux
(18.07.2006 в 15:18)
| | Штирлиц (программа) должен знать, что за кодировка . Попробуйте сделать тесты и подекодировать Штирлицем. | |
|
|
|
|
|
|
|
для: DDK
(18.07.2006 в 11:17)
| | Закономерность - UTF-8, так она называется? | |
|
|
|
|
|
|
|
для: 12345
(18.07.2006 в 13:50)
| | Не уверен. В UTF8-кодировке текст пересылается методом AJAX, но в какую кодировку конвертирует JS-функция escape() - я, право, не знаю... я про эти %u0430 и т.д... ЗЫ: IConv не предлагать. | |
|
|
|
|
|
|
|
для: DDK
(18.07.2006 в 13:54)
| | 430 - это шестнадцатеричное представление номера символа в UNICODE. символы
с 0x0410 ... 0x042F - это буквы А...Я
с 0x0430 ... 0x044F - это буквы а...я
0x0401 - Ё, 0x451 - ё | |
|
|
|
|
|
|
|
для: DDK
(18.07.2006 в 13:54)
| | Какой набор символов, кроме стандартного набора ascii и 2*33 русских букв, Вы хотите обрабатывать? | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 15:05)
| | кажется знаю как надо делать:
необходимо забыть про escape и unescape т.к. если верить умным книгам то: современные стандарты не рекомендуют их использовать. Вместо escape необходимо испольовать encodeComponent(), который прекрасно декодируется rawurldecode(). | |
|
|
|
|
|
|
|
для: Crux
(20.07.2006 в 05:11)
| | Дайте ссылку на encodeComponent() (а то только про Джаву попалдается и про экзотический язык "D"). | |
|
|
|
|
|
|
|
для: 12345
(20.07.2006 в 12:27)
| | прошу прощенья, кажется я прокосячися.
имеллось ввиду не encodeComponent, а encodeURIComponent. | |
|
|
|
|