我有一个文件,我用它来上传XML文件到我的网络服务器使用PHP,但我有一些XML文件的问题,我想改变它的编码从utf-8到ISO-8859-1之前,上传该文件,这是可能的一个原生的php函数,或我需要从头开始呢?
我的意思是在上传之前读取文件,也许用str_replace修改那部分,然后保存文件?
这是我代码的一部分
if (move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])) {
$xml = simplexml_load_file($upload_dir.$pic['name']);应该在if语句之前,你觉得呢?
发布于 2017-03-11 07:39:40
我为其他有同样问题的人解决了这个问题,我的问题是,我有一个可以上传XML文件的应用程序,这些文件的编码是utf-8,但由于某种原因,有些文件的格式不正确,因为编码不是utf-8,而是ISO-8859-1,所以当我尝试上传损坏XML时,javascript函数返回类似"parsererror" "SyntaxError: Unexpected token < in JSON at position 0 blabla的警告,所以我这样做了。
if (move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])) {
$xml = @simplexml_load_file($upload_dir.$pic['name']);
if ($xml === false) {
$data = file_get_contents($upload_dir.$pic['name']);
$data = utf8_encode($data);
file_put_contents($upload_dir.$pic['name'], $data);
$xml = simplexml_load_file($upload_dir.$pic['name']);
}我取消了simplexml_load_file函数的警告,也许不是最好的方法,但对我来说,这是我的解决方案,之后我获取xml文件的内容并将其转换为utf-8,然后将内容放回文件中,现在我可以正确地获取数据以执行所需的操作
发布于 2017-03-10 17:36:21
您不能在上传之前更改文件,只有在获得副本后才能更改。
XML文件在XML声明中包含其编码。有了这些信息,XML解析器就可以对其进行解码。SimpleXML和其他PHP XML都使用UTF-8。任何属性或方法都将返回UTF-8字符串。
唯一的例外是像asXml()这样的序列化方法。将使用为文档定义的编码。
所以这里并没有真正的将其转换为ISO-8859-1,加载到SimpleXML中只是将其转换回来。转换的两个可能的结果是,您将丢失ISO-8859-1中没有的字符,或者您中断了XML。
https://stackoverflow.com/questions/42702959
复制相似问题