使用php从xml文件中删除十六进制字符

使用php从xml文件中删除十六进制字符,php,xml,utf-8,hex,Php,Xml,Utf 8,Hex,首先,我有一个XML文件数组。这些文件需要迭代并检查某些“无法识别”的十六进制字符,并替换为正常的UTF-8文本或某种占位符 我试着用str_replace和preg_replace遍历文件并替换十六进制代码,但没有成功。我的最终问题是,在尝试使用simpleXML打开这些文件时,我收到了关于“非utf字符”的错误 以下是我目前掌握的情况: class HexadecimalConverter { public $filenames = array(); public fun

首先,我有一个XML文件数组。这些文件需要迭代并检查某些“无法识别”的十六进制字符,并替换为正常的UTF-8文本或某种占位符

我试着用str_replace和preg_replace遍历文件并替换十六进制代码,但没有成功。我的最终问题是,在尝试使用simpleXML打开这些文件时,我收到了关于“非utf字符”的错误

以下是我目前掌握的情况:

class HexadecimalConverter {

    public $filenames = array();

    public function __construct($filenames) {

        $this->filenames = $filenames;
        $this->removeHex();

    }

    public function removeHex() {

        foreach ($this->filenames as $key => $value) {

            $contents = file_get_contents($value);

            $contents = preg_replace("/\x96/", '–', $contents);
            $contents = preg_replace("/\x97/", '—', $contents);
            $contents = preg_replace("/\x85/", "...", $contents);
            $contents = preg_replace("/\xBA/", "", $contents);

            file_put_contents($value, $contents);

        }

    }

}
下面是我试图修复的错误:警告:simplexml加载文件()[function.simplexml加载文件]:./04R\u P455\u S1157.xml:5:解析器错误:输入不正确UTF-8,指示编码!字节:第130行C:\xampp\htdocs\hint\u updater\libraries\hint\u updater\u classes.php中的0x97 0x0D 0x0A 0x69


还是不走运,我已经尝试了这个线程中的所有建议,但是preg_replace似乎并没有替换所有十六进制代码实例。

您应该首先阅读文档。它们清楚地表明函数返回修改后的字符串,因此您必须通过
$contents=preg_replace(…)更改代码中的每一行preg_replace以使替换工作正常。现在您正在执行替换,但将结果字符串丢弃,因此最后您将原始字符串写回文件。

preg\u replace
返回新字符串


尝试
$contents=preg\u replace(“/\x96/”、“–;”、$contents)等等。

我不明白。你能举一个例子说明你的XML文件现在看起来是什么样子吗?这是不相关的,XML文件的结构很好。。。但是人们有一些方法可以复制并粘贴非法字符到文件中,从而在文件中产生不需要的十六进制代码。XML文件可以包含4000多行数据,因此它们是大文件。对不起,这是一个打字错误。。。我刚刚重新插入了preg_替换。使用正确的$contents=在每次preg\u replace之前,它似乎仍然没有通过并替换这些十六进制代码的所有实例您确定不想使用
foreach($this->filenames as$value)
?这是我认为这个代码唯一的错误。应该没关系。。。这只是给我一个索引和一个值试图改变它。。。因为这是我最后的希望:)你确定你的代码没有工作吗?记住,有几种不同的方法可以产生严肃的口音。。。例如,有一个组合接受字符,或者键入一个重音已经存在的字母。检查来自程序的十六进制输出-它可能已经删除了您指定的特殊字符。至少,解释一下它是如何仍然不起作用的。。。