首先,我有一个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似乎没有替换所有十六进制代码的实例。
答案 0 :(得分:0)
您应该先阅读preg_replace文档。他们清楚地声明该函数返回修改后的字符串,因此您必须通过$contents = preg_replace(...);
更改代码中的每个preg_replace行,以使替换工作正常。现在你正在进行替换,但抛出结果字符串,最后你将原始字符串写回文件。
答案 1 :(得分:0)
preg_replace
返回新字符串。
尝试$contents = preg_replace("/\x96/", '–', $contents);
等。