Как я могу принять хеш-метку в URL через $ _GET? - PullRequest
2 голосов
/ 02 июня 2010

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

index.php?name=Ben&address=101 S 10th St Suite #301

Я хочу предварительно заполнить поля формы этими данными $ _GET. Как бы я сделал это с Javascript (или jQuery), и есть ли запасной вариант, который не сломал бы мою форму для людей, не использующих Javascript? В настоящее время, если есть хэш (обычно в поле адреса), все после этого не анализируется и не сохраняется в $ _GET.

Ответы [ 4 ]

4 голосов
/ 02 июня 2010

Вы можете закодировать хеш как вам нужно urlencode (в php) или encodeURIComponent (в JavaScript).

«Хеш» не является частью запроса, поэтому ваш скрипт никогда его не увидит.

2 голосов
/ 02 июня 2010

Как сказал webdestroya, вам нужно отправить запрос с URL

index.php?name=Ben&address=101%20S%2010th%20St%20Suite%20%23301

Если вы используете формы HTML, строковое значение будет автоматически кодироваться при отправке формы.

1 голос
/ 02 июня 2010

пользователь будет щелкать ссылку в электронном письме и захочет увидеть хеш-метку, отображаемую в электронном письме

Вам нужно закодировать ссылку на то, что Бен цитировал , прежде чем вставить ее в электронное письмо. То, что у вас сейчас есть, вообще не является URL.

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

Иногда существует альтернативная функция, которая кодирует пробелы в + вместо %20. Обычно этого лучше избегать, так как + недействителен при любых обстоятельствах, но при желании:

index.php?name=Ben&address=101+S+10th+St+Suite+%23301

тогда вы будете использовать PHP urlencode функцию вместо более стандартной rawurlencode.

В любом случае, вы должны кодировать хеш-код в %23, потому что в противном случае хеш-код в URL-адресе HTTP означает идентификатор фрагмента (часть страницы, на которую нужно прокрутить браузер). Это не часть адреса самой страницы; он даже не передается из браузера на сервер, поэтому вы, конечно же, не сможете получить его из $_GET или любого другого интерфейса.

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

0 голосов
/ 02 июня 2010

Обычно я сохраняю хэш в файле cookie при загрузке

ej:

window.unload = function(){

 if(document.location.hash) setCoockie('myhash',document.location.hash);

};
...