Хорошо - название в основном говорит об этом.
Я хочу посмотреть на запрос URL-адресов и искать конкретные значения (одиночный символ или небольшая строка).
Я могу сделать это успешно - до тех пор, пока я ищу только «нормальные» символы (те, которые часто называют «безопасными» [a-zA-Z0-9 -_. ~]).
Как только я начинаю искать «небезопасных» или «чужих» персонажей - становится ужасно.
Я потратил весь день (и часть вчерашнего дня), пытаясь понять это.
Я прочитал тонны ... RFC, php.net для кодирования, обнаружения кодирования и т. Д.
Я даже пытался установить кодировку / кодировку в верхней части скрипта и т. Д.
Я прошел через различные параметры кодирования, настройки динамически, вручную и т. Д.
Ничего не сработало.
Попробуйте маленький скрипт ниже.
добавьте его в файл и получите к нему доступ и добавьте путь запроса ниже;
? q = a1 -. <^ 舆 </p>
Посмотри, что ты получишь.
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$needles = array(
needle1 => 'a',
needle2 => '1',
needle3 => '-',
needle4 => '.',
needle5 => '<',
needle6 => '^',
needle7 => 'Ë',
needle8 => 'à',
needle9 => 'Ü'
);
$haystack = parse_url(curPageURL(), PHP_URL_QUERY);
if (!empty($haystack)) {
$needlelist = implode(' | ',$needles);
echo "We are looking for some needles ( ".$needlelist." ) in a haystack (".$haystack.")<br/>";
foreach ($needles as $key=>$needle) {
echo "We are looking for ".$key."<br/>";
$check = strpos($haystack,$needle);
if ($check !== false) {
echo " - Yes : we found a needle (".$needle.") in the haystack";
} else {
echo " - No : we failed to find the needle (".$needle.") in the haystack";
}
echo "<br/>";
}
echo "--------------<br/>now lets try it with a little basing?<br/>";
foreach ($needles as $key=>$needle) {
echo "We are looking for ".$key."<br/>";
// Basing - encode the searched for value, and replace any double-encoded % chars
$needle = str_replace('%25','%',rawurlencode($needle));
$check = strpos($haystack,$needle);
if ($check !== false) {
echo " - Yes : we found a needle (".$needle.") in the haystack";
} else {
echo " - No : we failed to find the needle (".$needle.") in the haystack";
}
echo "<br/>";
}
}
Я не знаю о вас, но вместо странных символов или их правильных шестнадцатеричных кодов (согласно различным спискам / таблицам для urlencoded символов),
Я получаю следующее ([искал] (1-е результаты) (2-е результаты));
/ a a a
/ 1 1 1
/ - - -
/. , .
/ <<% 3C <br>
/ ^ ^% 5E
/ Ë Ã ‹% C3% 8B
/ а% C3% A0
/ Ü Ãœ% C3% 9C
( / добавлено для предотвращения вставки строки + кодировка здесь делает это очень трудным для публикации! )
проблема - например, последняя ...
Ü должен стать% DC (насколько я могу судить) - так почему же спаренный гекс?
Я пытался читать многобайтовые файлы ... но я не вижу, как браузеры кодируют символы в URL,
но сценарий не будет.
Итак - кто-нибудь видит, что я делаю неправильно или не делаю, или уже понял это?
.
Ради ясности ...
... Я НЕ спрашиваю, как заменить символы (я не хочу превращать Ü в U).
Просто возьмите данную строку и посмотрите, есть ли она в URL (прямая или закодированная для URL).
Спасибо, и я надеюсь, что кто-то может помочь.