替换特殊字符UTF-8 PHP DOM

替换特殊字符UTF-8 PHP DOM,php,dom,replace,Php,Dom,Replace,我有以下代码: $strhtml = file_get_contents('05001400300320100033100.html'); // create the DOMDocument object, and load HTML from a string $dochtml = new DOMDocument(); $dochtml->loadHTML($strhtml); $elm = $dochtml

我有以下代码:

        $strhtml = file_get_contents('05001400300320100033100.html');
        // create the DOMDocument object, and load HTML from a string
        $dochtml = new DOMDocument();
        $dochtml->loadHTML($strhtml);
        $elm = $dochtml->getElementById('upPanelActuciones');
        $segatiel= $dochtml->saveXml($elm);


        $order   = array("á","é","í","ó","ú","ñ");                      
        $replace = array("&aacute","&eacute","&iacute","&oacute","&uacute","&ntilde");
        $megin = str_replace($order, $replace,$segatiel); 

        echo $megin;
但显然str_replace函数不起作用,因为输出保留了稀有字符(如ó)。有没有办法让stru_替换工作

提前感谢你的帮助


pd:我有html字符集Utf-8集。

更新

试试这个

$strhtml = file_get_contents('05001400300320100033100.html');
$dochtml = new DOMDocument();
$dochtml->loadHTML($strhtml);
$elm = $dochtml->getElementById('upPanelActuciones');
$segatiel= $dochtml->saveXml($elm);
$trans = get_html_translation_table(HTML_ENTITIES);
unset($trans["\""], $trans["<"], $trans[">"]);
$megin = strtr($segatiel, $trans);
echo $megin;
$strhtml=file_get_contents('05001400300320100033100.html');
$DOCTML=新的DOMDocument();
$dochtml->loadHTML($strhtml);
$elm=$DOCTML->getElementById('upPanelActuciones');
$segatiel=$dochtml->saveXml($elm);
$trans=获取html翻译表(html实体);
未设置($trans[“\”],$trans[”);
$megin=strtr($segatiel,$trans);
echo$megin;

str_replace不适用于国际字符

<?php
/**
 * Replace all occurrences of the search string with the replacement string.
 *
 * @author Sean Murphy <sean@iamseanmurphy.com>
 * @copyright Copyright 2012 Sean Murphy. All rights reserved.
 * @license http://creativecommons.org/publicdomain/zero/1.0/
 * @link http://php.net/manual/function.str-replace.php
 *
 * @param mixed $search
 * @param mixed $replace
 * @param mixed $subject
 * @param int $count
 * @return mixed
 */
if (!function_exists('mb_str_replace')) {
    function mb_str_replace($search, $replace, $subject, &$count = 0) {
        if (!is_array($subject)) {
            // Normalize $search and $replace so they are both arrays of the same length
            $searches = is_array($search) ? array_values($search) : array($search);
            $replacements = is_array($replace) ? array_values($replace) : array($replace);
            $replacements = array_pad($replacements, count($searches), '');

            foreach ($searches as $key => $search) {
                $parts = mb_split(preg_quote($search), $subject);
                $count += count($parts) - 1;
                $subject = implode($replacements[$key], $parts);
            }
        } else {
            // Call mb_str_replace for each subject in array, recursively
            foreach ($subject as $key => $value) {
                $subject[$key] = mb_str_replace($search, $replace, $value, $count);
            }
        }

        return $subject;
    }
}
?>

但是你不是在找什么吗?

我尝试使用htmlentities()但返回了一个包含html代码的纯文本。但是使用saveXml我可以显示htlm结构。因此,使用此函数(mb_str_replace)我可以做我想做的吗?mb_stru__replace的工作方式与stru_replace完全相同,但可以接受国际字符。我尝试使用你的函数,但无法使其工作。我不知道我的错误是什么。我将变量重命名为$search、$replace、$subject,我认为saveXml不是数组,因此此函数无法工作。mb_str_replace($order、$replace、$segatiel);应该适用于您的代码。不适用。我真的不知道为什么不适用于saveXml。