Как безопасно передать параметры в URL - PullRequest
0 голосов
/ 09 января 2012

Я использую URL-адреса, подобные этим параметрам

http://localhost/articles/?author=Ben%20Cooper%2CAlex%20Hunter&title=.....&tags=..

Я urlencode их в ссылках.Это работает до тех пор, пока в параметрах не появятся специальные символы.

Например

http://localhost/articles/?author=..&title=&tags=..

Если в заголовке «У меня есть Любовь и Жизнь», то при первом кодировании он имеет Любовь +% 26 + Жизньиногда это становится Love+%26amp%3B+Life.

Почему это происходит?Я ценю любую помощь.

1 Ответ

1 голос
/ 09 января 2012

Сначала вам нужно использовать html_entity_decode () . Это превратит & (который закодирован для html, а не URL) в & , затем unlencode(), что превратит его в %26

HTML и URL имеют разные зарезервированные символы и кодируются по-разному. Многие фреймворки будут автоматически кодировать html-сущности, чтобы предотвратить странное отображение вашей страницы. Представьте, что у вас есть < в строке, которая может испортить страницу при ее отображении, поэтому она будет отображаться в html как &lt; и браузер отобразит ее как < вместо того, чтобы рассматривать ее как часть тега

Вы не можете напрямую закодировать &lt; в %3C (< urlencoded), потому что он будет думать, что вы буквально хотите закодировать &lt;, а не <, поэтому вам нужно пройти через html_entity_decode()

Вот фрагмент кода:

$str = 'Love &amp; Life'; //start with string that may or may not contain htmlentities
$decodedStr = html_entity_decode($str); //replace html entities with their literal counterparts
$urlEncodedStr = urlencode($decodedStr); //urlencode!

Надеюсь, это поможет!

...