为什么不使用html_decode_entities?

时间:2014-03-06 13:27:57

标签: php

此代码改编自html_entity_decode()

上的PHP手册条目
protected function decode($data)
{
    $data = html_entity_decode($data, ENT_QUOTES,'UTF-8');
    //echo $data;
    return $data;
}
protected function decode_data($data)
{

    if(is_object($data) || is_array($data)){
        array_walk_recursive($data,array($this,'decode'));
    }else{
        $data = html_entity_decode($data, ENT_QUOTES,'UTF-8');
    }
    return $data;
}

如果数据包含类似Children's的值,则不会将其解码为Children's

1 个答案:

答案 0 :(得分:1)

问题与html_entity_decode无关,如果你想解码引号实体,即使是像'这样的实体,你就是这么做的。

相反,您的问题是您没有正确使用array_walk_recursive。在下面我使用了一个匿名函数并将值作为参考传递:

function decode_data($data)
{
    if(is_object($data) || is_array($data)){
        // &$val, not $val, otherwise the array value wouldn't update.
        array_walk_recursive($data, function(&$val, $index) {
            $val = html_entity_decode($val, ENT_QUOTES,'UTF-8');
        });
    }else{
        $data = html_entity_decode($data, ENT_QUOTES,'UTF-8');
    }
    return $data;
}
$array = [
     "Children's",
     "Children's",
];
print_r( decode_data($array) );

将两个孩子的输出作为单引号字符而不是实体。