Проверьте, является ли строка URL-адресом, закодированным в PHP - PullRequest
19 голосов
/ 28 октября 2009

Как я могу проверить, закодирована ли строка в URL?

Какой из следующих подходов лучше?

  • Поиск в строке символов, которые были бы закодированы, которых нет, и если они существуют, то они не закодированы или
  • Используйте что-то вроде этого, что я сделал:

function is_urlEncoded($string){
 $test_string = $string;
 while(urldecode($test_string) != $test_string){
  $test_string = urldecode($test_string);
 }
 return (urlencode($test_string) == $string)?True:False; 
}

$t = "Hello World > how are you?";
if(is_urlEncoded($sreq)){
 print "Was Encoded.\n";
}else{
 print "Not Encoded.\n";
 print "Should be ".urlencode($sreq)."\n";
}

Приведенный выше код работает, но не в тех случаях, когда строка была закодирована дважды, как в следующих примерах:

  • $t = "Hello%2BWorld%2B%253E%2Bhow%2Bare%2Byou%253F";
  • $t = "Hello+World%2B%253E%2Bhow%2Bare%2Byou%253F";

Ответы [ 11 ]

0 голосов
/ 18 марта 2014

Я использую следующий тест, чтобы увидеть, были ли строки закодированы:

if(urlencode($str) != str_replace(['%','+'], ['%25','%2B'], $str))

Если строка уже была закодирована в urlen-кодировке, единственными символами, которые будут изменены двойным кодированием, являются% (который начинает все строки кодированных символов) и + (который заменяет пробелы.) Измените их обратно, и у вас должна быть исходная строка.

Дайте мне знать, если это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...