如何在PHP上传到服务器之前将编码更改为XML?

时间:2017-03-09 18:34:27

标签: php xml encoding utf-8

我有一个文件,我用它来使用PHP将XML文件上传到我的网络服务器但我有一些XML文件的问题,我想在上传之前将其编码从utf-8更改为ISO-8859-1文件,这是可能的本机PHP功能或我需要从头开始吗?

我的意思是在上传之前阅读文件,然后更改那部分str_replace,然后保存xml文件?

这是我的代码的一部分

if (move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])) {

    $xml = simplexml_load_file($upload_dir.$pic['name']);

应该在if语句之前,你怎么看?

2 个答案:

答案 0 :(得分:1)

只有在获得副本后才能在上传之前更改文件。

XML文件在XML声明中包含其编码。有了这些信息,XML解析器就会解码它。 SimpleXML和其他PHP XML Apis使用所有UTF-8。任何属性或方法都将返回UTF-8字符串。

唯一的例外是像asXml()这样的序列化方法。将使用为文档定义的编码。

因此,将它转换为ISO-8859-1并不是真正的意义,将其加载到SimpleXML中只会将其转换回来。转换的两个可能影响是,您将丢失ISO-8859-1中不可用的字符或者破坏XML。

答案 1 :(得分:0)

我为同样的问题解决了我的问题,我的问题是我有一个应用程序,我可以上传XML文件,这些文件的编码是Traceback (most recent call last): admin | File "parcelnotifier.py", line 1, in <module> admin | from app import app admin | File "./app/__init__.py", line 8, in <module> admin | from flask_marshmallow import Marshmallow admin | File "/usr/local/lib/python3.5/dist-packages/flask_marshmallow/__init__.py", line 29, in <module> admin | from . import sqla admin | File "/usr/local/lib/python3.5/dist-packages/flask_marshmallow/sqla.py", line 13, in <module> admin | import marshmallow_sqlalchemy as msqla admin | File "/usr/local/lib/python3.5/dist-packages/marshmallow_sqlalchemy/__init__.py", line 4, in <module> admin | from .schema import ( admin | File "/usr/local/lib/python3.5/dist-packages/marshmallow_sqlalchemy/schema.py", line 98, in <module> admin | class TableSchema(with_metaclass(TableSchemaMeta, ma.Schema)): admin | File "/usr/local/lib/python3.5/dist-packages/marshmallow/compat.py", line 66, in __new__ admin | return meta(name, bases, d) admin | File "/usr/local/lib/python3.5/dist-packages/marshmallow/schema.py", line 106, in __new__ admin | klass.opts = klass.OPTIONS_CLASS(meta, ordered=ordered) admin | TypeError: __init__() got an unexpected keyword argument 'ordered' 但是由于某些原因,某些文件是格式错误,因为编码不是utf-8而是utf-8所以当我试图上传这会破坏XML时,javascript函数会返回一个类似ISO-8859-1 blabla的警告,所以我这样做了

"parsererror" "SyntaxError: Unexpected token < in JSON at position 0

我支持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']); } 函数的警告,可能不是最好的方法,但对我来说这是我的解决方案,之后我获取xml文件的内容并将其转换为{{1}然后将内容放回到文件中,现在我可以正确地获取数据以执行我需要的操作