我有一个文件,我用它来使用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语句之前,你怎么看?
答案 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}然后将内容放回到文件中,现在我可以正确地获取数据以执行我需要的操作