Мне нужно заменить url недопустимые символы с чем-то url valid, а затем преобразовать обратно.
Это для страницы поиска с URL-адресом, например http://my.site/search/this-is-a-search , формой поиска POSTS, после чего пользователь перенаправляется на новый URL-адрес.
Php имеет функции urlencode и urldecode, однако они вообще не работают и оставляют недопустимые символы в моем URL-адресе.
Конечно, мне здесь не нужно изобретать колесо.
Для таких вещей, как http://my.site/search/this-is-a-search
(т. rawurlencode
rawurldecode
строки запроса), вы должны использовать rawurlencode
и rawurldecode
. Они гарантированно защищены от URL-адресов.
Тем не менее, urlencode
никогда не будет генерировать небезопасный URL-путь, так как единственное различие заключается в том, как кодируются пробелы, а urlencode
кодирует пробелы в +
, что разрешено в пути URL.
Из RFC 1738:
httpurl = "http: //" hostport ["/" hpath ["?" поиск]] hpath = hsegment * ["/" hsegment] hsegment = * [uchar | ";" | ":" | "@" | "&" | знак равно uchar = unreserved | побег unreserved = alpha | цифры | безопасный | дополнительный safe = "$" | "-" | "_" | "" | "+"
Как насчет rawurlencode()
.
http://www.php.net/manual/en/function.rawurlencode.php
echo rawurlencode('http://my.site/search/this-is-a-search'); // http%3A%2F%2Fmy.site%2Fsearch%2Fthis-is-a-search