Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Urlencode() с $_SERVER['REQUEST_URI'] и без
цитата
21/02/13 в 18:39
 cherchell2010
$string1="по немецки";
Если кодирую переменную $string1 через urlencode выводит одно.
Если получаю $string1 через $_SERVER['REQUEST_URI']и кодирую тем же urlencode выходит другое
Почему так происходит ?
Как исправить положение ?

Последний раз редактировалось: cherchell2010 (21/02/13 в 22:24), всего редактировалось 2 раз(а)
цитата
21/02/13 в 18:48
 Дартаньян
cherchell2010: потому что в GET он уже закодирован, и ты повторно его кодируешь.
цитата
21/02/13 в 19:01
 Sterx
Код:

urlencode(urldecode($any_string));
цитата
21/02/13 в 19:32
 Дартаньян
Sterx: trollface.png зачем?
цитата
21/02/13 в 19:35
 Sterx
а непонятно? такие теории развел в теме про С, а тут непонятно
цитата
21/02/13 в 19:36
 Дартаньян
Sterx: ты получишь тоже самое что и в гет, зачем делать лишние телодвижения?
цитата
21/02/13 в 19:39
 Sterx
просто проигнорируй мессадж
цитата
21/02/13 в 19:45
 Дартаньян
Sterx: trollface.png нет мне таки интересно, на хрена советовать человек решение его проблемы если то что он делает это лишние?
цитата
21/02/13 в 19:49
 Sterx
Оффтопик:
отличие МХ от программерских форумов - здесь никто никого не учит как надо. дискуссия с тобой мне неинтересна, я ответил ТС
цитата
21/02/13 в 19:53
 Дартаньян
Sterx: Оффтопик: то есть, тут могут посоветовать лишние тело движения для адлата?
цитата
21/02/13 в 22:23
 cherchell2010
Не верно написал , не GET Method
получаем данные из $_SERVER['REQUEST_URI']


Хотя с GET таже самая ситуация

Замеченная проблема возникает с символами не латинского алфавита.
цитата
21/02/13 в 23:17
 Mika
Тебе же написали.
Дартаньян писал:
cherchell2010: потому что в GET он уже закодирован, и ты повторно его кодируешь.

Не нужно кодировать то, что и так уже закодировано.
цитата
21/02/13 в 23:20
 Дартаньян
cherchell2010:
Если я правильно понял автора, то ему надо это.
urlencode(urldecode($_SERVER['REQUEST_URI']).$string);
цитата
21/02/13 в 23:30
 cherchell2010
похоже вы упорно не видите мою проблему.
$q=бла-бла-бла -посылаем через GEТ

<?
header("Content-Type: text/html; charset=utf-8");
extract($_REQUEST);
$q2="бла-бла-бла";

$i=urlencode($q);
$i2 =urlencode($q2);

echo $q;
echo "<br>";
echo $i;
echo "<br>";
echo $i2;

?>

Во всех трех случаях имеем разные значения одинаковой переменной
бла-бла-бла
%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0
%E1%EB%E0-%E1%EB%E0-%E1%EB%E0


Все что мне надо, это получить %E1%EB%E0-%E1%EB%E0-%E1%EB%E0 из гет метода
А вышенаписаный код выдает %D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0
цитата
21/02/13 в 23:42
 Mika
cherchell2010 писал:
Во всех трех случаях имеем разные значения одинаковой переменной

Потому что файлы надо сохранять в соответствующей кодировке. Сохрани в utf-8, запусти и получишь, что $i равно $i2.
цитата
21/02/13 в 23:42
 johndoe2
Вот что твой код выдает у меня

Код:
бла-бла-бла
%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0
%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0


Результат предсказуем т.к. $q == 'бла-бла-бла' и следовательно $q и $q2 равны.

Другое дело, если твой файл, в котором написано $q2="бла-бла-бла"; имеет кодировку, отличную от utf-8.

Ты бы показал, что именно выдает тебе "Во всех трех случаях имеем разные значения".

upd

%E1%EB%E0-%E1%EB%E0-%E1%EB%E0 говорит о том, что твой файл в кодировке cp1251

upd2

если менять кодировку файла нельзя, бери iconv('utf-8','cp1251',$_GET['q']) вместо $_GET['q']

Последний раз редактировалось: johndoe2 (21/02/13 в 23:45), всего редактировалось 1 раз
цитата
21/02/13 в 23:44
 cherchell2010
вот же ж я писал
у меня выдает
бла-бла-бла
%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B0
%E1%EB%E0-%E1%EB%E0-%E1%EB%E0

Какие файлы, я вам привел простой пример с переменными.

Или под файлами подразумевается сам код php ?

Последний раз редактировалось: cherchell2010 (21/02/13 в 23:51), всего редактировалось 1 раз
цитата
21/02/13 в 23:47
 Дартаньян
johndoe2: опередил гад.
цитата
21/02/13 в 23:54
 cherchell2010
сижу , думаю, как у исполняемого php файла может быть кодировка. Че то не пойму.

По поводу iconv , что делать если язык переменной заранее не известен ?
цитата
21/02/13 в 23:56
 johndoe2
cherchell2010 писал:
Какие файлы, я вам привел простой пример с переменными.

Или под файлами подразумевается сам код php ?


Тестовый код, который ты привёл, сохранён в файле, который ты же открываешь в своём же браузере. Именно этот файл у тебя же сохранён в кодировке cp1251, и поэтому строка $q2="бла-бла-бла"; тоже имеет эту кодировку же. А современные браузеры кириллицу, вписанную в адресную строку, передают в виде utf-8. Отсюда и разница: $q поступает в скрипт в кодировке utf-8, а $q2 в нём же - в cp1251. С какой радости не-ascii символам в этих строках быть одинаковыми?
цитата
22/02/13 в 00:05
 cherchell2010
Как быть в случае передачи переменной на японском, немецком, русском и простой латиницы ?
цитата
22/02/13 в 00:09
 johndoe2
cherchell2010 писал:
Как быть в случае передачи переменной на японском, немецком, русском и простой латиницы ?


Забудь об однобайтовых кодировках и распишись в получении месячного проездного в рай. Работай с utf-8 и всё тут
цитата
22/02/13 в 10:51
 AWD
еще кто-то не в utf-8? ну капец...
cherchell2010: та хоть китайцы с ихними 2к иероглифами - все поместяца в утф-8. два байта, понимаешь? 65к символов, а тыт тут про своих немцев... юзай гугл. ты первый, кого я послал на гугол, но уже накипело. мастер-х разработан для порнушников, а не для недопрограммистов, таких как ты и я...
еще насчет "как у исполняемого php файла может быть кодировка."
что есть исполняемый пхп файл? когда и кем он исполняется? давай так: исполняемый тхт файл - таких - пруд пруди. и исполняются похлеще пхп кода.
давайте не путать Божий Дар с яишницей. кодировка файла решает тоже, но не вздумай утф8 с заголовком писать, моск сломаешь об первые три байта файла...
уровень топикстартера-кодера мне ясен. и меня берет ужос, когда я понимаю, что есть кодеры, которые на меня глядят так-же... но у меня хватает признаться... понимэшь?
учись, студент smail54.gif
мир всем!
цитата
23/02/13 в 23:48
 Maje
По теме: ТС - исполняемый файл пхп - это всего лишь текстовый файл, с расширением php, который интерпретируется в код.
Каждый текстовый файл имеет свою кодировку.
Чтобы не было проблем - юзай UTF-8 without BOM.
Как уже отмечалось выше, UTF-8 - 2 байта на символ, тобишь около 65к различных вариантов символа. Китайский язык с их иероглифами меркнет, по-сравнению с такой кодировкой.
Удачи в будущем кодинге)
З.Ы. За что минусуете-то?)


Эта страница в полной версии