Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Предлагаю найти универсальный способ кодирования кириллицы для AJAX-передачи
 
 автор: DDK   (18.07.2006 в 11:17)   письмо автору
 
 

Давно меня мучает эта проблема, ещё со времен написания чата. Собственно, мой способ прост и туп до безобразия - в JS я кодирую текст при помощи escape(), а в PHP-скрипте у меня написана функция с массивом, содержащим декодировку всех русских букв, если говорить языком регулярных выражений - [а-Я]. Но опыт использования чата показывает, что конечно же не только одни кириллические символы кодируются escape-функцией, но и много спец-символов, таких как, например, знак копирайта (©) и много еще чего можно сотворить при помощи Alt+Numpad. Так как же быть ? Гугл дал знать, что в PHP нет конкретной функции, декодирующей шифр escape()-функции JS. А писать и использовать функцию с массивом всех символов кодировки будет не очень разумно. Быть может, есть у escape-кодировки какая-то закономерность символов ? Может возможно как-то заменять при помощи preg_replace (рег. выр.) кодированные символы на char($i) ? Вот такой сабж предлагаю обсудить.

   
 
 автор: Trianon   (18.07.2006 в 11:29)   письмо автору
 
   для: DDK   (18.07.2006 в 11:17)
 

В каком виде Вы принимаете закодированную строку от JS?
И в каком Вы хотите её получить?

   
 
 автор: DDK   (18.07.2006 в 13:43)   письмо автору
 
   для: Trianon   (18.07.2006 в 11:29)
 

-

   
 
 автор: DDK   (18.07.2006 в 13:46)   письмо автору
 
   для: Trianon   (18.07.2006 в 11:29)
 

Так кодирую строку в JS перед отправкой:

text = escape(text);

А так раскодирую её в 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 в 13:46)
 

ну-ну помню я эти заморочки http://softtime.ru/forum/read.php?id_forum=4&id_theme=16700&page=1

вот ещё пару ссылок на эту же тему
http://softtime.ru/forum/read.php?id_forum=4&id_theme=11146&page=1
http://softtime.ru/forum/read.php?id_forum=4&id_theme=4112&page=1

как бороться с escape для себя я так решения простого и не нашёл:(

   
 
 автор: 12345   (18.07.2006 в 15:41)   письмо автору
 
   для: Crux   (18.07.2006 в 15:18)
 

Штирлиц (программа) должен знать, что за кодировка . Попробуйте сделать тесты и подекодировать Штирлицем.

   
 
 автор: 12345   (18.07.2006 в 13:50)   письмо автору
 
   для: DDK   (18.07.2006 в 11:17)
 

Закономерность - UTF-8, так она называется?

   
 
 автор: DDK   (18.07.2006 в 13:54)   письмо автору
 
   для: 12345   (18.07.2006 в 13:50)
 

Не уверен. В UTF8-кодировке текст пересылается методом AJAX, но в какую кодировку конвертирует JS-функция escape() - я, право, не знаю... я про эти %u0430 и т.д... ЗЫ: IConv не предлагать.

   
 
 автор: Trianon   (18.07.2006 в 15:02)   письмо автору
 
   для: DDK   (18.07.2006 в 13:54)
 

430 - это шестнадцатеричное представление номера символа в UNICODE. символы
с 0x0410 ... 0x042F - это буквы А...Я
с 0x0430 ... 0x044F - это буквы а...я
0x0401 - Ё, 0x451 - ё

   
 
 автор: Trianon   (18.07.2006 в 15:05)   письмо автору
 
   для: DDK   (18.07.2006 в 13:54)
 

Какой набор символов, кроме стандартного набора ascii и 2*33 русских букв, Вы хотите обрабатывать?

   
 
 автор: Crux   (20.07.2006 в 05:11)   письмо автору
 
   для: Trianon   (18.07.2006 в 15:05)
 

кажется знаю как надо делать:

необходимо забыть про escape и unescape т.к. если верить умным книгам то: современные стандарты не рекомендуют их использовать. Вместо escape необходимо испольовать encodeComponent(), который прекрасно декодируется rawurldecode().

   
 
 автор: 12345   (20.07.2006 в 12:27)   письмо автору
 
   для: Crux   (20.07.2006 в 05:11)
 

Дайте ссылку на encodeComponent() (а то только про Джаву попалдается и про экзотический язык "D").

   
 
 автор: Crux   (20.07.2006 в 17:47)   письмо автору
 
   для: 12345   (20.07.2006 в 12:27)
 

прошу прощенья, кажется я прокосячися.

имеллось ввиду не encodeComponent, а encodeURIComponent.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования