我现在不知道如果这是提出这类问题的地方所以我会试一试。我想知道以下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);
}
答案 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包含整个匹配,因此,即使表达式匹配,也没有替换。