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

HTML+CSS+JavaScript

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

 

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

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

тема: не работает функция decodeURI
 
 автор: Organ   (29.06.2006 в 12:11)   письмо автору
 
 

Проблема такая. Пытаюсь использовать функцию decodeURI. В документации написано, что функция доступна с IE 5.5. У меня IE 6.0. Однако при выполнении следующего кода происходит ошибка.

s1 = decodeURI(s2);

, где s2-строка, закодированная php-функцией urlencode.

Кто-нибудь использовал эту функцию? Спасибо.

   
 
 автор: elenaki   (29.06.2006 в 12:29)   письмо автору
 
   для: Organ   (29.06.2006 в 12:11)
 

если используете urlencode(), то для декодирования надо использовать urldecode().
по-моему так. могу ошибаться.

   
 
 автор: Organ   (29.06.2006 в 12:35)   письмо автору
 
   для: elenaki   (29.06.2006 в 12:29)
 

Дело в том, что кодирую php, а раскодирую javascript'ом (использую ajax, возникла проблема с подкачкой русских символов). А и та и другая функцию используют стандартный url-encoding. И она вообще не возвращает никакой результат..

   
 
 автор: elenaki   (29.06.2006 в 12:38)   письмо автору
 
   для: Organ   (29.06.2006 в 12:35)
 

не получится. у этих функций разные принципы кодирования. у меня была такая же проблема.
решилась отказом от передачи нелатинских символов в URL. использую XML. а для русского
на dklab эта проблема решена, кажется.

   
 
 автор: Organ   (29.06.2006 в 13:02)   письмо автору
 
   для: elenaki   (29.06.2006 в 12:38)
 

Ага, с помощью функций php iconv.. А мой php4 их не знает. Написано, правда что перевод кодировок встроен в библиотеку, но что-то не работает ). А хорошо у вас проблемы решаютя. Вот бы мне так. Не нравится-отказался )).

   
 
 автор: elenaki   (29.06.2006 в 13:06)   письмо автору
 
   для: Organ   (29.06.2006 в 13:02)
 

мне надо было быстро. а когда думать некогда - трясти надо. не мытьем так катаньем, а
задача решена. есть время сидеть на форуме :)

   
 
 автор: coloboc66   (29.06.2006 в 17:53)   письмо автору
 
   для: elenaki   (29.06.2006 в 13:06)
 

А для чего вообще нужно кодировать УРЛ?

   
 
 автор: elenaki   (29.06.2006 в 19:28)   письмо автору
 
   для: coloboc66   (29.06.2006 в 17:53)
 

не УРЛ, а данные.
в URL нельзя передавать кириллицу и другие национальные символы. поэтому их надо кодировать.

   
 
 автор: elenaki   (29.06.2006 в 19:32)   письмо автору
 
   для: Organ   (29.06.2006 в 13:02)
 

Не нравится-отказался )).

не отказался, а решил другим способом. более доступным на тот момент. будет время - решу и с URL/

   
 
 автор: 12345   (29.06.2006 в 19:47)   письмо автору
 
   для: elenaki   (29.06.2006 в 19:32)
 

Тут проблема, наверное, в том, что не поставлены кавычки вокруг константы s2. Т.е. надо

s1 = decodeURI("<?=$s2?>");

   
 
 автор: Organ   (29.06.2006 в 21:22)   письмо автору
 
   для: 12345   (29.06.2006 в 19:47)
 

Да нет, s2 имеется ввиду переменная javascript, полученная запросом на php-сервер, где она была закодирована.

   
 
 автор: Бог Зайцев   (29.06.2006 в 19:48)   письмо автору
 
   для: Organ   (29.06.2006 в 12:11)
 

Мм )) Что мешает прописать нормально кодировку ?

Попробуй ф-цию unescape )

   
 
 автор: elenaki   (29.06.2006 в 20:08)   письмо автору
 
   для: Бог Зайцев   (29.06.2006 в 19:48)
 

не помогает. пробовали...

   
 
 автор: Бог Зайцев   (29.06.2006 в 21:22)   письмо автору
 
   для: elenaki   (29.06.2006 в 20:08)
 

Промазал )

   
 
 автор: Organ   (29.06.2006 в 21:22)   письмо автору
 
   для: Бог Зайцев   (29.06.2006 в 19:48)
 

Пробовал unescape, не помогает. Вообще то в библиотеке Котерова предусмотрено правильное отображение win1251. Но для некоторых целей в настроках апача я убрал автокодировку и у меня передача русских данных совсем не работает. Поэтому я пытался закодировать на сервере php и раскодировать javascriptom. Однако функции, обратной urlencode я так и не нашел.

   
 
 автор: Бог Зайцев   (29.06.2006 в 21:26)   письмо автору
 
   для: Organ   (29.06.2006 в 21:22)
 

А если кодировать на уровне клиентa ф-цией escape ?)

   
 
 автор: Organ   (29.06.2006 в 21:29)   письмо автору
 
   для: Бог Зайцев   (29.06.2006 в 21:26)
 

Как можно кодировать клиентом, если все переменные генерируются на сервере, после чего формируется жаваскрипт (функция, куда заложены передаваемые данные). Причем эти данные должны быть уже закодированы, иначе ajax их не подгружает.

   
 
 автор: Бог Зайцев   (29.06.2006 в 22:01)   письмо автору
 
   для: Organ   (29.06.2006 в 21:29)
 

А что мешает расшифровывать в пхп ?)

Как вариант:
Возьми строчку, содержащую все возможные символы, в пхп откодируй urlenode'ом, потом разбей в массив (А) по одному символу на элемент, после чего создай массив B, каждый элемент которого соответствует раскодированному (urldecode)э лементу массива А, после чего эти два массива запиши в JS и сделай замену всех элементов массива А в нужной строке на соответствующие элементы массива Б )

Это не очень элегантно, но должно работать, если других вариантов нету %)

   
 
 автор: Organ   (29.06.2006 в 22:23)   письмо автору
 
   для: Бог Зайцев   (29.06.2006 в 22:01)
 

Так то конечно всегда можно сделать, спасибо за описание реализации этого ценного алгоритма )). Но это корявенько и криво. Буду искать выход. Как найду, напишу. Спасибо.

   
 
 автор: Бог Зайцев   (29.06.2006 в 22:42)   письмо автору
 
   для: Organ   (29.06.2006 в 22:23)
 

Ну не так уж и коряво )) массивы надо генерировать 1 раз, в результате код на 3 строчки получится влючая объявление массивов )

А что с urldecode? )

   
 
 автор: Organ   (30.06.2006 в 08:10)   письмо автору
 
   для: Бог Зайцев   (29.06.2006 в 22:42)
 

urldecode использовать не получится, т. к. подгрузка данных происходит БЕЗ перезагрузки страницы. А эти подгруженные данные показываются пользователю жаваскриптом. И естественно, если пользователь не бог зайцев, он не поймет "%20%AD%BF....". )

   
 
 автор: Бог Зайцев   (30.06.2006 в 09:47)   письмо автору
 
   для: Organ   (30.06.2006 в 08:10)
 

А причем тут перезагрузка страницы?)
Данные по ту сторону провода все равно достаются скриптом) Судя по тому, что в URL есть параметры, это скорее всего что-то серверное ) Там и надо копать )

   
 
 автор: Organ   (30.06.2006 в 09:58)   письмо автору
 
   для: Бог Зайцев   (30.06.2006 в 09:47)
 

Эммс. Что-то не понял я ничего. Механизм работы следующий:

1. На клиенте javascript создает объект Subsys_JsHttpRequest_Js (что то вроде переписанного xmlHTTPRequest). Формирует запрос post или get, задается также адрес странички, на которую делается запрос (load.php).

2. На странице load.php получаем запрос, получаем информацию из базы, КОДИРУЕМ (в моем случае) urlencode, суем в некоторый массив $_RESULT.

3. При этом автоматически генерируется javascript-код, в виде вызова функции javascript Subsys_JsHttpRequest_Js.dataReady, параметрами которой передаются данные из массива $_RESULT, преобразованные из php-массива в javascript-массив. Этот код выводится в контент.

4. На клиенте получем ответ с сервера в переменную Subsys_JsHttpRequest_Js.responseJS. Имеем в переменной responseJS закодированные данные, которые сразу же показываем клиенту. Раскодировать имеем возможность ТОЛЬКО клиентом. Иначе на какой хрен вообще тут Ajax ).

   
 
 автор: Бог Зайцев   (30.06.2006 в 14:14)   письмо автору
 
   для: Organ   (30.06.2006 в 09:58)
 

А что за специальные смиволы у тебя там ?)
Может есть смысл кодировать только их ?)

   
 
 автор: Organ   (01.07.2006 в 15:32)   письмо автору
 
   для: Бог Зайцев   (30.06.2006 в 14:14)
 

Включил автокодировку апача обратно (для тех файлов где нужно отключить настроил отдельный каталог). Теперь аякс правильно подгружает русские символы в кодировке win-1251. Теперь все работает. Хотя вопрос об обратной кодировке пхп жаваскриптом остается открытым, проблема решена. Всем спасибо.

   
 
 автор: Бог Зайцев   (03.07.2006 в 01:33)   письмо автору
 
   для: Organ   (01.07.2006 в 15:32)
 

Кодировку просто надо было в load.php тоже прописывать )

   
 
 автор: Organ   (03.07.2006 в 10:58)   письмо автору
 
   для: Бог Зайцев   (03.07.2006 в 01:33)
 


$JsHttpRequest =& new Subsys_JsHttpRequest_Php("win-1251");

Эта строчка была всегда. С рождения мира.

   
 
 автор: elenaki   (30.06.2006 в 10:06)   письмо автору
 
   для: Бог Зайцев   (30.06.2006 в 09:47)
 

в браузер выводить получается, выводит закодированную строку. если эту строку скопировать
и вставить в функцию декодирования - она нормально раскодируется. но скрипт не понимает.
подозреваю, что скрипт видит не то, что вижу я в браузере, а то, что в коде, т.е.
<script>document.write(urlencode('tralalalala'));</script>

не забывайте, что мы сейчас - в php-скрипте на сервере, а tralalalala - данные, полученные из базы
по запросу. как их закодировать java-script'ом, не используя тэги <script></script>?

   
Rambler's Top100
вверх

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