2012-01-09 3 views
0

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

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

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

Например

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

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

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

+0

В последнем случае он кодируется в формате XML/HTML до того, как он закодирован в URL (хотя преобразование '(пробел)' в '+' выходит за рамки определения процентной кодировки): оно идет 'Love & Life' - > 'Love & Life' -> этот материал. Но так как я не использую ни PHP, ни Cake ... не могу сказать больше :) –

+0

Как создаются ваши URL-адреса? – kaklon

ответ

1

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

HTML и URL-адреса имеют различные зарезервированные символы и кодируются по-разному. Множество фреймворков автоматически кодирует html-объекты, чтобы предотвратить случайную рендеринг вашей страницы. Представьте, что вы указали < в строке, которая могла бы испортить страницу, когда она была отображена, поэтому она получит echo'd в 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! 

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

+0

Что касается того, где именно кодируются html-объекты или почему это кодирование иногда, но не другие, я не могу помочь, не глядя на ваш код. –

Смежные вопросы