PHP html_entity_decode не преобразует косую черту

#php #html-entities

#php #html-сущности

Вопрос:

Я использую PHP 7.4 и сталкиваюсь со странной проблемой. У меня есть некоторые переменные, поступающие из запроса GET, которые выглядят следующим образом:

start_date=12/1/2020amp;end_date=12/31/2020

Я декодировал запрос GET в две переменные, $start_date и $end_date .

Затем я запустил html_entity_decode($start_date, ENT_COMPAT, 'UTF-8') , но моя строка по-прежнему 12/1/2020 вместо того, что я ожидаю: 12/1/2020 .

Я также запустил его без каких-либо аргументов, т.Е.. без ENT_COMPAT, и мой результат все тот же.

Я неправильно понимаю, что html_entity_decode делает? Я мог бы просто сделать str_replace , но я пытаюсь сделать это правильно.

Комментарии:

1. Вы, должно быть, ищете urldecode .

2. Это должно быть в массиве $ _GET: array ( ‘start_date’ => «12/1/2020», ‘end_date’ => «12/31/2020», ). Откуда вы берете вышеуказанные данные?

3. Как вы сказали, вы, по-видимому, недопонимаете. HTML-объекты — это такие вещи, как амперсанд точка с запятой, такие как amp;nbsp;, amp;copy;, amp;aring; и т. Д.. Это не то же самое, что кодирование URL. Вы можете попробовать parse_str(urldecode('start_date=12/1/2020amp;end_date=12/31/2020'), $result); print_r($result); , если хотите пример :).

Ответ №1:

html_entity_decode() — неправильная функция. urldecode() также не требуется, поскольку parse_str() выполняет это с помощью (см. Примечание в руководстве по PHP).

 $queryString = 'start_date=12/1/2020amp;end_date=12/31/2020';
parse_str($queryString, $getArray);
var_dump($getArray);
 

Вывод:

 array(2) {
  ["start_date"]=>
  string(9) "12/1/2020"
  ["end_date"]=>
  string(10) "12/31/2020"
}
 

Если строка поступает из $_SERVER [‘QUERY_STRING’], то parse_str() также не требуется, поскольку результат уже находится в $_GET .