Почему nbsp не отображается как nbsp в URL

Я следую учебному пособию, в котором веб-приложение, написанное на PHP, помещает черные списки из входных данных (параметр 'id'). Задача состоит в том, чтобы добавить другие символы, которые по существу обходят этот черный список, но все еще интерпретируются базой данных MySQL на заднем плане. Что работает, так это URL, сконструированный так -http://192.168.2.15/sqli-labs/Less-26/?id=1'%A0||%A0'1

Теперь мой вопрос заключается в том, что если "%A0" указывает на NBSP, то почему я иду на сайт типа http://www.url-encode-decode.com/ и пытаюсь декодировать URL? http://192.168.2.15/sqli-labs/Less-26/?id=1'%A0||%A0'1, это декодируется как http://192.168.2.15/sqli-labs/Less-26/?id=1'�||�'1,

Вместо вопросительного знака внутри черного ящика я ожидал увидеть пустое место.

3 ответа

Решение

Я подозреваю, что это связано с различиями между кодировками символов.

Значение A0 представляет собой nbsp в кодировке ISO-8859-1 (и, вероятно, в других кодировках с расширенным ASCII). На странице http://www.url-encode-decode.com/ используется кодировка UTF-8.

Ваша проблема в том, что нет персонажа, представленного A0 в UTF-8. Эквивалент nbsp символ в UTF-8 будет представлен значением C2A0,

расшифровка http://192.168.2.15/sqli-labs/Less-26/?id=1'%C2%A0||%C2%A0'1 будет производить nbsp персонажи, которые вы ожидали.

Независимо от причины ошибки кодирования, попробуйте %20 вместо пробела! Позже вы можете str_replace пробел с

echo str_replace(" ", " ", $_GET["id"]);

Возможно скрипт на этом сайте не работает должным образом. Если вы используете его в своем коде PHP, он должен работать правильно.

echo urldecode( '%A0' );

выходы:

 

Другие вопросы по тегам