Url обрезается, если # присутствует

Я прочитал: Что означает/#!/Означает URL? и поэтому я знаю, что # является разделителем фрагментов, но у меня возникают трудности с $ _GET с URL-адресом для отображения на следующей странице, где присутствует #.

У меня есть php-страница, которая отправляет пользовательский ввод, URL-адрес, на другую страницу, на которой он отображается.

Где URL, содержащий переменные, выглядит так...

http://website.com/qr/index.php?url=http://www.example.com&many=false&set=false

Отображается http://www.example.com.

В то время как URL, содержащий такой фрагмент...

http://website.com/qr/index.php?url=http://www.example.com/#fragment&many=false&set=false

ничего не отображает.

Я не могу использовать $ _POST.

Спасибо за любую помощь.

2 ответа

Вероятно, вы должны URL-кодировать параметр, который вы размещаете в URL-адресе, тем более, что он также является URL-адресом (что означает, что он имеет очень высокую вероятность содержать символы, которые имеют особое значение в контексте URL-адреса, например, # и /, Если вы используете Javascript для установки параметра URL, вы можете сделать это с encodeURIComponent. Если вы используете PHP для добавления этого параметра URL, это urlencode

Из этой первой ссылки знак фунта подпадает под категорию "Небезопасные персонажи", которые заимствуют у автора этот дальнейший совет (выделение мое):

Некоторые персонажи демонстрируют возможность неправильного понимания URL-адресов по различным причинам. Эти символы также должны быть закодированы.

Это "небезопасное" обозначение исходит из RFC 1738, в котором говорится о персонаже "Фунт" (опять же, акцент мой):

Все небезопасные символы всегда должны быть закодированы в URL-адресе. Например, символ "#" должен быть закодирован в URL-адресах даже в системах, которые обычно не обрабатывают идентификаторы фрагментов или якорей, поэтому, если URL-адрес скопирован в другую систему, которая их использует, нет необходимости изменять URL-кодирование.


Вы должны использовать urlencode или rawurlencode. В противном случае все после "#" являются частью фрагмента, и возможно, что у вас возникнут некоторые проблемы.

licensed under cc by-sa 3.0 with attribution.