【问题标题】:How to change coding to XML before upload to server in PHP?如何在 PHP 中上传到服务器之前将编码更改为 XML?
【发布时间】:2017-03-09 18:34:26
【问题描述】:

我有一个文件,用于使用 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语句之前,你怎么看?

【问题讨论】:

  • 这篇文章应该可以帮助您将 xml 字符串转换为 ISO-8859-1 stackoverflow.com/questions/374425/…。您可以(我会)在保存文件之前执行此操作。只需使用 simplexml_load_string($pic['tmp_name']) 并使用 file_put_contents($upload_dir.$pic['name'], $yourConvertedXmlString) 将转换后的结果保存到文件中。

标签: php xml encoding utf-8


【解决方案1】:

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

XML 文件在 XML 声明中包含其编码。 XML 解析器使用此信息对其进行解码。 SimpleXML 和其他 PHP XML API 使用全部 UTF-8。任何属性或方法都会返回 UTF-8 字符串。

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

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

【讨论】:

  • 感谢您的回答,但我已经解决了我的问题,我将把它作为其他有同样问题的人的答案
【解决方案2】:

我为其他有同样问题的人解决了我的问题,我的问题是我有一个可以上传 XML 文件的应用程序,这些文件的编码是utf-8,但由于某些原因,有些文件格式错误因为编码不是utf-8,而是ISO-8859-1,所以当我尝试上传这个损坏的XML时,javascript函数返回了一个类似"parsererror" "SyntaxError: Unexpected token < in JSON at position 0blabla的警告,所以我这样做了

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 然后放入内容回到文件,现在我可以正确获取数据来做我需要的事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多