Сначала вам нужно использовать html_entity_decode () . Это превратит &
(который закодирован для html, а не URL) в &
, затем unlencode()
, что превратит его в %26
HTML и URL имеют разные зарезервированные символы и кодируются по-разному. Многие фреймворки будут автоматически кодировать html-сущности, чтобы предотвратить странное отображение вашей страницы. Представьте, что у вас есть <
в строке, которая может испортить страницу при ее отображении, поэтому она будет отображаться в html как <
и браузер отобразит ее как <
вместо того, чтобы рассматривать ее как часть тега
Вы не можете напрямую закодировать <
в %3C
(<
urlencoded), потому что он будет думать, что вы буквально хотите закодировать <
, а не <
, поэтому вам нужно пройти через html_entity_decode()
Вот фрагмент кода:
$str = 'Love & 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!
Надеюсь, это поможет!