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

HTML+CSS+JavaScript

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

 

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

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

тема: преобразование строки
 
 автор: кен   (16.05.2005 в 22:25)   письмо автору
 
 

Как с помощью JS преобразовать строку "кот "Вася" в строку "%EA%EE%F2+%22%C2%E0%F1%FF%22", которую можно передавать в качестве get-параметра? И обратно.

   
 
 автор: кен   (17.05.2005 в 18:11)   письмо автору
 
   для: кен   (16.05.2005 в 22:25)
 

Уточняю задачу. Нужен JS-эквивалент PHP-функций urlencode()/urldecode(). Чтобы строка запроса, сформированная JS, корректно расшифровывалась с помощью PHP. Функции escape()/unescape() не работают: в них кориллица и спецсимволы кодируются по-другому, и PHP-urldecode их не восстанавливает. Думаю, таких готовых функций в JS нет. А как написать самому? По какому алгоритму делает это PHP?

   
 
 автор: glsv (Дизайнер)   (18.05.2005 в 08:42)   письмо автору
 
   для: кен   (17.05.2005 в 18:11)
 

Есть. Называются

encodeURI("строка")

и

decodeURI("строка")

   
 
 автор: кен   (19.05.2005 в 07:51)   письмо автору
 
   для: glsv (Дизайнер)   (18.05.2005 в 08:42)
 

Спасибо огромное, Дизайнер. Вы мне очень помогли!

   
 
 автор: кен   (29.05.2005 в 21:16)   письмо автору
 
   для: glsv (Дизайнер)   (18.05.2005 в 08:42)
 

Упс! Опять проблема. Когда Дизайнер предложил encodeURI(), я помнится, попробовал - и вроде вышло. А сейчас приступил к реализации проекта, и обнаружил, что это не работает.

Пример:

- [JS] encodeURI ('я') = %D0%B0
- [PHP] urlencode ('я') = %E0

Результаты совсем не совпадают. И, естественно, PHP не может переварить строку, составленную с помощью JS. Так что же делать? Помогите, пожалуйста.

   
 
 автор: glsv (Дизайнер)   (30.05.2005 в 05:24)   письмо автору
 
   для: кен   (29.05.2005 в 21:16)
 

JavaScript еще преобразовывает в UTF-8 кодировку. Попробуйте вот так:

<html>
<head>
<script language="JavaScript">
alert(encodeURI("я"))
</script>
</head>
<body>
<?
 
echo urlencode(iconv("cp1251""UTF-8""я")); 
?>

Функция iconv преобразовывает из кодировки cp1251 в кодироку UTF-8. Для работы этой функции должна быть подключена библиотека iconv.

   
 
 автор: кен   (30.05.2005 в 14:51)   письмо автору
 
   для: glsv (Дизайнер)   (30.05.2005 в 05:24)
 

Не могу подключить библиотеку iconv.
Делаю так. В php.ini установил:

extension_dir = "C:/Program Files/PHP/extensions/"
extension=php_iconv.dll

В ответ - ругань:
"php.exe - Библиотека DLL iconv.dll ненайдена по указанному пути ..." и куча путей: к ядру PHP и ко многим системным папкам.
И сразу же: "Warning. Unkhown(): Unable to load dynamic library 'C:/Program Files/PHP/extensions/php_iconv.dll' - Не найден указанный модуль."
Почему не находит, если в указанной в ini папке свободно валяется php_iconv.dll (20 Kb)? И что он ищет в системных папках?
А ещё есть какая-то iconv.dll (820 Kb) в C:/Program Files/PHP/dlls/ - это что такое?
Подскажите, что я не так сделал при подключении?

   
 
 автор: кен   (30.05.2005 в 15:11)   письмо автору
 
   для: кен   (30.05.2005 в 14:51)
 

Всё, разобрался. Надо было дополнительно скопировать iconv.dll в одну из системных папок или в корневую папку PHP. Помогла Ваша статья:
http://www.softtime.ru/info/articlephp.php?id_article=24

   
 
 автор: glsv (Дизайнер)   (31.05.2005 в 07:29)   письмо автору
 
   для: кен   (30.05.2005 в 15:11)
 

Если на хосте не заладится (не подключена iconv), то пишите. Есть и другие способы конвертирования в UFT-8.

   
 
 автор: rockmachine   (01.09.2005 в 13:49)   письмо автору
 
   для: glsv (Дизайнер)   (31.05.2005 в 07:29)
 

Дизайнер, пожалуйста, напишите, как избавиться от данной проблемы, не устанавливая дополнительных модулей. Заранее спасибо.

   
 
 автор: glsv (Дизайнер)   (02.09.2005 в 04:34)   письмо автору
 
   для: rockmachine   (01.09.2005 в 13:49)
 

Попробуйте вот такой вариант. Перекодирование осуществляется в лоб через собственную функцию.


<html> 
<head> 
<script language="JavaScript"> 
alert("Это буква я: "+encodeURI("я")) 
</script> 
</head> 
<body> 
<? 
// Это буква я
$str "%D1%8F";
echo 
"Исходная строка: ".$str."<br>";
$str urldecode($str);
echo 
"Перекодированная: ".utf8_win($str);

function 
utf8_win($s)
{
    
$s=str_replace("\xD0\xB0","а",$s);  $s=str_replace("\xD0\x90","А",$s);
    
$s=str_replace("\xD0\xB1","б",$s);  $s=str_replace("\xD0\x91","Б",$s);
    
$s=str_replace("\xD0\xB2","в",$s);  $s=str_replace("\xD0\x92","В",$s);
    
$s=str_replace("\xD0\xB3","г",$s);  $s=str_replace("\xD0\x93","Г",$s);
    
$s=str_replace("\xD0\xB4","д",$s);  $s=str_replace("\xD0\x94","Д",$s);
    
$s=str_replace("\xD0\xB5","е",$s);  $s=str_replace("\xD0\x95","Е",$s);
    
$s=str_replace("\xD1\x91","ё",$s);  $s=str_replace("\xD0\x81","Ё",$s);
    
$s=str_replace("\xD0\xB6","ж",$s);  $s=str_replace("\xD0\x96","Ж",$s);
    
$s=str_replace("\xD0\xB7","з",$s);  $s=str_replace("\xD0\x97","З",$s);
    
$s=str_replace("\xD0\xB8","и",$s);  $s=str_replace("\xD0\x98","И",$s);
    
$s=str_replace("\xD0\xB9","й",$s);  $s=str_replace("\xD0\x99","Й",$s);
    
$s=str_replace("\xD0\xBA","к",$s);  $s=str_replace("\xD0\x9A","К",$s);
    
$s=str_replace("\xD0\xBB","л",$s);  $s=str_replace("\xD0\x9B","Л",$s);
    
$s=str_replace("\xD0\xBC","м",$s);  $s=str_replace("\xD0\x9C","М",$s);
    
$s=str_replace("\xD0\xBD","н",$s);  $s=str_replace("\xD0\x9D","Н",$s);
    
$s=str_replace("\xD0\xBE","о",$s);  $s=str_replace("\xD0\x9E","О",$s);
    
$s=str_replace("\xD0\xBF","п",$s);  $s=str_replace("\xD0\x9F","П",$s);
    
$s=str_replace("\xD1\x80","р",$s);  $s=str_replace("\xD0\xA0","Р",$s);
    
$s=str_replace("\xD1\x81","с",$s);  $s=str_replace("\xD0\xA1","С",$s);
    
$s=str_replace("\xD1\x82","т",$s);  $s=str_replace("\xD0\xA2","Т",$s);
    
$s=str_replace("\xD1\x83","у",$s);  $s=str_replace("\xD0\xA3","У",$s);
    
$s=str_replace("\xD1\x84","ф",$s);  $s=str_replace("\xD0\xA4","Ф",$s);
    
$s=str_replace("\xD1\x85","х",$s);  $s=str_replace("\xD0\xA5","Х",$s);
    
$s=str_replace("\xD1\x86","ц",$s);  $s=str_replace("\xD0\xA6","Ц",$s);
    
$s=str_replace("\xD1\x87","ч",$s);  $s=str_replace("\xD0\xA7","Ч",$s);
    
$s=str_replace("\xD1\x88","ш",$s);  $s=str_replace("\xD0\xA8","Ш",$s);
    
$s=str_replace("\xD1\x89","щ",$s);  $s=str_replace("\xD0\xA9","Щ",$s);
    
$s=str_replace("\xD1\x8A","ъ",$s);  $s=str_replace("\xD0\xAA","Ъ",$s);
    
$s=str_replace("\xD1\x8B","ы",$s);  $s=str_replace("\xD0\xAB","Ы",$s);
    
$s=str_replace("\xD1\x8C","ь",$s);  $s=str_replace("\xD0\xAC","Ь",$s);
    
$s=str_replace("\xD1\x8D","э",$s);  $s=str_replace("\xD0\xAD","Э",$s);
    
$s=str_replace("\xD1\x8E","ю",$s);  $s=str_replace("\xD0\xAE","Ю",$s);
    
$s=str_replace("\xD1\x8F","я",$s);  $s=str_replace("\xD0\xAF","Я",$s);
    return 
$s;
}

?>

   
 
 автор: rockmachine   (02.09.2005 в 17:18)   письмо автору
 
   для: glsv (Дизайнер)   (02.09.2005 в 04:34)
 

Такой вариант похож на выключение воды путем завязывания узлом водопроводного крана.

   
 
 автор: cheops   (02.09.2005 в 21:17)   письмо автору
 
   для: rockmachine   (02.09.2005 в 17:18)
 

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

   
 
 автор: glsv (Дизайнер)   (03.09.2005 в 04:25)   письмо автору
 
   для: rockmachine   (02.09.2005 в 17:18)
 

У вас же ничего нет кроме метода грубой силы… Необходимые библиотеки на хосте не установлены. Поэтому выбора у вас нет.

   
 
 автор: rockmachine   (05.09.2005 в 13:50)   письмо автору
 
   для: glsv (Дизайнер)   (03.09.2005 в 04:25)
 

Дизайнер, я понял: зря это я, про воду. Спасибо, что так подробно ответили на вопрос, не пожалев времени.
-----------------------------------
Дизайнер, а как Вы думаете, почему, пользуясь такими развитыми языками, как
PHP и JavaScript, приходится стоять раком из-за мелочей вроде кодировки?

   
 
 автор: glsv (Дизайнер)   (06.09.2005 в 06:12)   письмо автору
 
   для: rockmachine   (05.09.2005 в 13:50)
 

С мелочами всегда и везде нервотрепка.
А про PHP...
С кириллицей много проблем. И та в том числе. Видимо не было среди разработчиков языка братьев славян.

   
 
 автор: cheops   (07.09.2005 в 03:01)   письмо автору
 
   для: rockmachine   (05.09.2005 в 13:50)
 

>Дизайнер, а как Вы думаете, почему, пользуясь такими
>развитыми языками, как
>PHP и JavaScript, приходится стоять раком из-за мелочей
>вроде кодировки?
По тому что в России очень много кодировок (5 штук), поэтому проблемы не избежны, пока все на UNICODE не перелезут (да и в нём уже плодить разные варианты начали).

   
Rambler's Top100
вверх

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