PHP函数问题

时间:2011-10-07 09:33:25

标签: php function

我现在不知道如果这是提出这类问题的地方所以我会试一试。我想知道以下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 :(得分:0)

这个功能有点奇怪。第一个函数调用将以UTF-8编码的字符串转换为ASCII编码字符串,其中非映射字符转换为HTML实体(如果它们存在于HTML 4中,则为命名实体,否则为数字实体)。例如:

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

产量

foo"é⌑'&

因此,这与htmlentities的不同之处在于1)在给定的情况下使用数字实体,2)不触及&"<等特殊字符。

然而,第二个函数调用更奇怪。它查找只有一个ASCII字母数字字符的命名实体是否启动输入,如果是,在此输入上调用htmlentities (实际上它不是因为e不使用修饰符,函数名称不在字符串中,因此在评估参数时执行)。此调用无效,因为htmlentities('${1}')'${1}'且反向引用1包含整个匹配,因此,即使表达式匹配,也没有替换。