Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: rawurlencode и urlencode = каша
Форумы портала PHP.SU » PHP » Программирование на PHP » rawurlencode и urlencode = каша

Страниц (1): [1]
 

1. Viper - 21 Июля, 2009 - 20:59:36 - перейти к сообщению
Собственно задача простая. Передать в строке запроса переменную с каким-то текстом. к примеру пусть строка будет вида:
index.php?cname=США

для показа строки делаю:
<a href="index.php?cname='.rawurlencode($cname).'">...

т.е. в результате на следующей странице получаю в строке %D0%A1%D0%A8%D0%90

если сделать echo rawurldecode($_POST['cname']); то получается РЎРЁРђ

что-то то ли я с лыжами... то ли где-то ошибка... в чем затык-то ?

PS! C urlencode(decode) тот же баян.
2. JustUserR - 21 Июля, 2009 - 21:27:34 - перейти к сообщению
А в переменных $cname и $_POST['cname'] одно и то же лежит - вы проверяли?
Хотя может проблемы с кодировками - тогда надо отдебно соображать
3. Viper - 21 Июля, 2009 - 22:26:39 - перейти к сообщению
JustUserR $cname = 'США';

print_r($_REQUEST); и результат:

CODE (text):
скопировать код в буфер обмена
  1. Array ( [uid] => 2 [pass] => d0eee77d47071bf0a8520321dac37610 [cce155d1feafd016900e5b5e297153e0] => c4d8daa821458478fb46142ca316f253ea71dc55a1dc25542b70d7a4e51ffcfe62 [b3e12912cd21c0dd6dbf0fc03aa70ccd] => 51b19ffb54bd3e1f69ce57e582fbad3d [74cb262c1284d6e08d5a90540bf07efe] => 0d5c255e536231e8ac9dd85651e35608 [PHPSESSID] => d30552c0a3a2b56ac5fd40766e0b714b [option] => com_logs [task] => viewByCountry [cname] => %D0%A1%D0%A8%D0%90 )


...после перекодирования каша как написал выше.

PS! Что база откуда берутся названия стран, что сама страница, все в cp1251.


(Добавление)
тыкс... после некоторых ковыряний разобрался более-менее в чем беда. строка-то в utf8 походу в запросе передается.

сделал через base64_encode(decode). вроде работает. хотя конечно вид ссылки испоганен...
вместо cname=США получается cname=0djA
4. Nestor - 21 Июля, 2009 - 23:27:30 - перейти к сообщению
строка передаваемая в $_GET всегда в utf8.

вот тебе ф-ция в помощь
PHP:
скопировать код в буфер обмена
  1. function utf8_to_win1251($text){
  2.         if (function_exists('iconv')) {
  3.                 return iconv("UTF-8","windows-1251//IGNORE",$text);
  4.         } else {
  5.                 $str = strtr($text,array("Р°"=>"а","Р±"=>"б","РІ"=>"в","Рі"=>"г","Рґ"=>"д","Рµ"=>"е","С‘"=>"ё","Р¶"=>"ж","Р·"=>"з","Рё"=>"и","Р№"=>"й","Рє"=>"к","Р»"=>"л","Рј"=>"м","РЅ"=>"н","Рѕ"=>"о","Рї"=>"п","СЂ"=>"р","СЃ"=>"с","С‚"=>"т","Сѓ"=>"у","С„"=>"ф","С…"=>"х","С†"=>"ц","С‡"=>"ч","С€"=>"ш","С‰"=>"щ","СЉ"=>"ъ","С‹"=>"ы","СЊ"=>"ь","СЌ"=>"э","СЋ"=>"ю","СЏ"=>"я","Рђ"=>"А","Р‘"=>"Б","Р’"=>"В","Р“"=>"Г","Р”"=>"Д","Р•"=>"Е","РЃ"=>"Ё","Р–"=>"Ж","Р—"=>"З","Р?"=>"И","Р™"=>"Й","Рљ"=>"К","Р›"=>"Л","Рњ"=>"М","Рќ"=>"Н","Рћ"=>"О","Рџ"=>"П","Р "=>"Р","РЎ"=>"С","Рў"=>"Т","РЈ"=>"У","Р¤"=>"Ф","РҐ"=>"Х","Р¦"=>"Ц","Р§"=>"Ч","РЁ"=>"Ш","Р©"=>"Щ","РЄ"=>"Ъ","Р«"=>"Ы","Р¬"=>"Ь","Р­"=>"Э","Р®"=>"Ю","С–"=>"і","Р†"=>"І","С—"=>"ї","Р‡"=>"Ї","С”"=>"є","Р„"=>"Є","Т‘"=>"ґ","Тђ"=>"Ґ",));
  6.                 return $str;
  7.         }
  8. }
5. JustUserR - 22 Июля, 2009 - 03:04:59 - перейти к сообщению
Viper Ну раз в юникоде вы сделайте чтото типа mb_urldecode и потом уже обычный urlencode
Функции mb_urldecode встроенной нету но должна лежать похожая в библиотеках фукнций для PHP
Nestor Чтото подозрения что ваша функция будет работаь по разному в зависимости от того в какой кодировке сохранить PHP-скрипт с ней
6. Nestor - 22 Июля, 2009 - 03:18:22 - перейти к сообщению
функция будет работаь по разному в зависимости от того в какой кодировке сохранить PHP-скрипт с ней только если отсутствует ф-ция iconv
7. Viper - 22 Июля, 2009 - 19:51:24 - перейти к сообщению
Nestor спасибо за функцию. переделал. теперь хоть вид урлов нормальный Улыбка

PS! Все файлы все равно в win1251

 

Powered by ExBB FM 1.0 RC1