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

时间:2010-08-10 13:52:07

标签: php xml utf-8 hex

首先,我有一个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_load_file()[function.simplexml-load-file]:。04R_P455_S1157.xml:5:解析器错误:输入不正确UTF-8,表示编码!字节:第130行的C:\ xampp \ htdocs \ hint_updater \ libraries \ hint_updater_classes.php中的0x97 0x0D 0x0A 0x69

仍然没有运气,我已经尝试了这个线程中建议的所有内容,但是preg_replace似乎没有替换所有十六进制代码的实例。

2 个答案:

答案 0 :(得分:0)

您应该先阅读preg_replace文档。他们清楚地声明该函数返回修改后的字符串,因此您必须通过$contents = preg_replace(...);更改代码中的每个preg_replace行,以使替换工作正常。现在你正在进行替换,但抛出结果字符串,最后你将原始字符串写回文件。

答案 1 :(得分:0)

preg_replace返回新字符串。

尝试$contents = preg_replace("/\x96/", '–', $contents);等。