#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 .