Вопрос о функции PHP - PullRequest
       21

Вопрос о функции PHP

0 голосов
/ 07 октября 2011

Не знаю, если это место, где можно задать вопрос такого рода, поэтому я попробую. Мне было интересно, что делает следующая пользовательская функция php в примере кода ниже? Если кто-то объяснит мне подробно, спасибо.

function decode_characters($info)
{
    $info = mb_convert_encoding($info, "HTML-ENTITIES", "UTF-8");
    $info = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$info);
    return($info);
}

1 Ответ

0 голосов
/ 07 октября 2011

Функция немного странная. Первый вызов функции преобразует строку, закодированную в UTF-8, в строку, закодированную в ASCII, где не отображенные символы преобразуются в сущности HTML (именованные сущности, если они существуют в HTML 4, в противном случае числовые сущности). Например:

echo mb_convert_encoding("foo\"é⌑'&", "HTML-ENTITIES", "UTF-8");

выходы

foo"é⌑'&

Таким образом, это отличается от множества тем, что 1) числовые объекты используются в данных обстоятельствах и 2) специальные символы, такие как &, " или <, не затрагиваются.

Второй вызов функции, однако, более странен. Он находит, если именованный объект только с одним буквенно-цифровым символом ASCII начинает ввод, и, если это так, вызывает htmlentities для этого ввода (на самом деле это не так, потому что модификатор e не используется и имя функции отсутствует в строке, поэтому оно выполняется при оценке аргументов). Этот вызов не имеет никакого эффекта, потому что htmlentities('${1}') равен '${1}', а обратная ссылка 1 охватывает все совпадение, поэтому, даже если выражение совпадает, подстановка отсутствует.

...