Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> uri_escape_utf8 и encodeURIComponent() 
:(
    Опции темы
mastercz
Дата 17.11.2009, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



Добрый день.
Если я правильно понял документацию, то  uri_escape_utf8  и encodeURIComponent()  являются подобными функциями.
Однако почему-то у меня они выдают различный код одной и той-же  строки 'ПРИВЕТ' (koi8-r)

encodeURIComponent() -> %D0%9F%D0%A0%D0%98%D0%92%D0%95%D0%A2
uri_escape_utf8()          -> %C3%B0%C3%B2%C3%A9%C3%B7%C3%A5%C3%B4

В связи с этим задан несколько вопросов.
 1. Какую функцию и как использовать, чтобы можно было  закодировать данные в JavaScript (и Perl) а а раскодировать потом в Perl.

 2. uri_escape работает с 8-байтовыми последовательностями. Возможно ли работать с ней   на JavaScript .

 3. Для чего нужно кодирование в escape последовательность. Нужно ли это делать для POST переменной.

Заранее благодарю за ответ.
PM MAIL   Вверх
Bulat
Дата 17.11.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



mastercz, я думаю, что 'escape' и 'encode' - имеют два разных предназначения, конечно похожы, но есть небольшое отличие. Это во-первых. Во-вторых обрати внимание на 

encodeURIComponent() -> %D0%9F%D0%A0%D0%98%D0%92%D0%95%D0%A2
uri_escape_utf8()          -> %C3%B0%C3%B2%C3%A9%C3%B7%C3%A5%C3%B4

т.е. при encodeURIComponent() - не совсем понятно с кодировкой. smile

Цитата(mastercz @  17.11.2009,  07:28 Найти цитируемый пост)
1. Какую функцию и как использовать, чтобы можно было  закодировать данные в JavaScript (и Perl) а а раскодировать потом в Perl.


Когда я работал Perl & Java, то использовал Encode::decode - для более четкой передачи данных, после чего занового декодировал в Java

Цитата(mastercz @  17.11.2009,  07:28 Найти цитируемый пост)
2. uri_escape работает с 8-байтовыми последовательностями. Возможно ли работать с ней   на JavaScript .


не знаю, скорее это нужно в раздел JavaScript. Лично я просто по приятельски, дружу не сильно smile

Цитата(mastercz @  17.11.2009,  07:28 Найти цитируемый пост)
3. Для чего нужно кодирование в escape последовательность. Нужно ли это делать для POST переменной.


Хе-хе.. Тут боюсь рассказать не перерассказать. smile Любая программа, код, содержит некий набор специальных зарезервированных символов, которые могут встречаться в передаваемом тексте. Поэтому, если в тексте встречаются какие-то спец. символы, которые нужно воспринимать не как программные, а как исходный текст - эскейпятся эти символы, чтобы программа воспринимала их как символы текста.
Для чего конкретно в веб - боюсь если я начну рассказывать со своей памяти, то больше совру.. Это лучше самому почитать - если очень интересно.

А вообще эскейпить и кодировать/декодировать данные - это немного разные вещи. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
amg
Дата 17.11.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Bulat @  17.11.2009,  09:26 Найти цитируемый пост)
encodeURIComponent() -> %D0%9F%D0%A0%D0%98%D0%92%D0%95%D0%A2
uri_escape_utf8() -> %C3%B0%C3%B2%C3%A9%C3%B7%C3%A5%C3%B4
Может, поможет разобраться:
0xD0 0x9F в UTF-8 - это юникодный кириллический символ "\u041F", буква "П".
0xC3 0xB0 в UTF-8 - это юникодный символ расширенной латиницы "\u00F0", на его месте в кодировке KOI8-R находится буква "П".

Т.е. получается, 
encodeURIComponent() выдает обычный юникод в кодировке UTF-8. 
uri_escape_utf8() - тоже в кодировке UTF-8, но хитрее, с привязкой к исходной кодировке, типа "KOI8-R в UTF-8".

Это сообщение отредактировал(а) amg - 17.11.2009, 11:13
PM MAIL   Вверх
mastercz
Дата 18.11.2009, 04:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



с помощью модуля  use URI::Escape::XS; удается получить строку 
%D0%9F%D0%A0%D0%98%D0%92%D0%95%D0%A2
однако обратное преобразование почему-то не получается :
Код

#!/usr/bin/perl

use strict;
use URI::Escape::XS;
use Encode;

my $var='ПРИВЕТ';
my $var1=encodeURIComponent(Encode::decode('koi8-r',$var));
my $var2=Encode::encode('koi8-r',decodeURIComponent($var1));;

print  "\n--> ".$var;
print  "\n--> ".$var1;
print  "\n--> ".$var2;



--> ПРИВЕТ
--> %D0%9F%D0%A0%D0%98%D0%92%D0%95%D0%A2
--> ??? ????????

Немного поэкспериментировал, ОКАЗАЛОСЬ, нужно преобразовывать UTF8 к широким символам.

Код

#!/usr/bin/perl

use strict;
use URI::Escape::XS;
use Encode;

    my $var='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
    my $var1=encodeURIComponent(Encode::decode('koi8-r',$var));
    my $var2= Encode::decode('utf8',decodeURIComponent($var1));
    my $var3= Encode::encode('koi8-r',$var2);

    print  "\n--> ".$var1;
    print  "\n--> ".$var3;
    print  "\n";



 Только почему-то работает нестабильно иногда в переменной $var3 мусор какой то наблюдается.

(Не мусор, неверно работает модуль. В bugs reports эту ошибку уже описали недели 2 назад )

P.S. Неужели не существует простых стабильных решений - чтобы в JavaScript заэскейпить  а в перле разэскейпить ?


Это сообщение отредактировал(а) mastercz - 18.11.2009, 07:12
PM MAIL   Вверх
Bulat
Дата 18.11.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(mastercz @  18.11.2009,  04:51 Найти цитируемый пост)
P.S. Неужели не существует простых стабильных решений - чтобы в JavaScript заэскейпить  а в перле разэскейпить ?


Почему же, есть... Как минимум работать с одной кодировкой для начала - utf8, допустим. Подавляющее большинство проблем с кодировками только из-за этого.


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
mastercz
Дата 19.11.2009, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



Цитата(Bulat @ 18.11.2009,  09:18)
Цитата(mastercz @  18.11.2009,  04:51 Найти цитируемый пост)
P.S. Неужели не существует простых стабильных решений - чтобы в JavaScript заэскейпить  а в перле разэскейпить ?


Почему же, есть... Как минимум работать с одной кодировкой для начала - utf8, допустим. Подавляющее большинство проблем с кодировками только из-за этого.

Bulat приведи пожалуйста пример в любой кодировке, как заэскейпить в JavaScript и разэкскейпить в перл.
PM MAIL   Вверх
Bulat
Дата 19.11.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(mastercz @  19.11.2009,  01:12 Найти цитируемый пост)
Bulat приведи пожалуйста пример в любой кодировке, как заэскейпить в JavaScript и разэкскейпить в перл. 


Я очень плохо знаю javascript. Когда я работал с java, то в перле декодирвал с помощью Encode::decode_utf8 и передавал, а в java 

Код

    private static String doEncodeData(String data) {
        Charset cs = Charset.forName(defaultCharset);
        ByteBuffer bb = cs.encode(data);
        CharBuffer charbuf=Charset.forName(defaultCharset).decode(bb);
        return charbuf.toString();
    } 


Обратно раскодировал.

У меня кстати есть отдельная тема, здесь же, посвященная модулю Inline::Java и передаче параметров из одного языка другому.


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.