Почему 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' );
выходы: