Тест, если строкой является URL, закодированный в PHP

Динамически подключаемая библиотека.

, Чтобы дать Вам пример, Если Вам загрузили чужой DLL в Вас приложение, можно использовать биты программирования от него.

можно загрузить DLL, который генерирует случайные числа, которые всегда запускаются с "5" или что-то.

В Вас программа можно назвать CrazyDLL.GenerateRandomNumbersSorta (), и это возвратит число.

Для примера реального мира, у меня есть DLL, который комбинирует 4 текстовых поля (Вы использовали бы их для ввода IP-адресов), и он автоматически только принимает, что числа меньше чем 256 и дескрипторы, нажимающие клавишу Backspace, переходят к предыдущему текстовому полю.

я создал DLL с тем кодом и теперь всем, что я должен сделать, перетащить больше тех наборов текстового поля IP-адреса, не имея необходимость копировать весь тот код много раз.

тот же DLL также имеет функцию для преобразования IP-адресов к шестнадцатеричным строкам и другого полезного кода.

21
задан Michael Currie 10 September 2015 в 23:30
поделиться

5 ответов

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

Лучше ли искать в строке символы, которые будут закодированы, а какие нет, и если они существуют тогда он не закодирован.

Я думаю, что это лучший подход, поскольку он позаботится о вещах, которые были выполнены программно (при условии, что приложение не оставило бы незакодированный символ).

Одна вещь, которая здесь будет путаница ... Технически, % «должен быть» закодирован, если он будет присутствовать в конечном значении, поскольку это специальный символ.

10
ответ дан 29 November 2019 в 06:21
поделиться

ну, термин «закодированный URL» немного расплывчат, возможно, простая проверка регулярного выражения поможет

$is_encoded = preg_match('~%[0-9A-F]{2}~i', $string);
3
ответ дан 29 November 2019 в 06:21
поделиться

Нет надежного способа сделать это, так как есть строки, которые остаются неизменными в процессе кодирования, то есть кодируется "abc" или нет? Нет однозначного ответа. Кроме того, как вы уже знаете, некоторые символы имеют несколько кодировок ... Но ...

Ваша схема декодирования-проверки-кодирования-проверки не работает из-за того, что некоторые символы могут быть закодированы более чем одним способом. Однако небольшое изменение вашей функции должно быть достаточно надежным, просто проверьте, изменяет ли декодирование строку, если да, то она была закодирована.

Конечно, это не будет доказательством дурака, так как «10 + 20 = 30 "вернет истину (+ преобразуется в пробел), но на самом деле мы просто выполняем арифметические операции. Я полагаю, это то, чему вы пытаетесь противодействовать, извините, но я не думаю об этом » идеальное решение.

HTH.

Изменить:
Как я уже упоминал в моем собственном комментарии (просто повторюсь здесь для ясности), хорошим компромиссом, вероятно, будет проверка на недопустимые символы в вашем URL (например, пробел) , а если есть, то не кодируется. Если их нет, попробуйте декодировать и посмотреть, изменится ли строка. Это по-прежнему не справится с арифметикой выше (что невозможно), но, надеюсь, этого будет достаточно.

3
ответ дан 29 November 2019 в 06:21
поделиться

Я думаю, что нет надежного способа сделать это. Например, рассмотрим следующее:

$t = "A+B";

Этот URL закодирован как «A B» или его нужно закодировать как «A% 2BB»?

5
ответ дан 29 November 2019 в 06:21
поделиться

У меня есть одна хитрость:

вы можете сделать это, чтобы предотвратить двойное кодирование. Каждый раз сначала декодируйте, затем снова кодируйте;

$string = urldecode($string);

Затем повторите

$string = urlencode($string);

Выполняя этот способ, мы можем избежать двойного кодирования:)

35
ответ дан 29 November 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: