【问题标题】:PHP SimpleXML asXML writes ANSI encoded filePHP SimpleXML asXML 写入 ANSI 编码文件
【发布时间】:2011-08-04 10:53:08
【问题描述】:

我正在尝试将一些内容写入 XML 文件,但我确实遇到了特殊字符的问题。

我要写的内容是通过$_GET提交给脚本的,所以我假设它被正确解码为UTF-8内容。

$write = $_GET['content'];

将被喂食:

file.php?content=s%F6per

在 PHP 中,我执行以下操作:

$xml = simplexml_load_file('file.xml');
$newentry = $xml -> addChild('element',$write);
$xml -> asXML($xml_filename);

打开的 XML 文件是 UTF-8 编码的。当我编写没有任何“问题字符”的内容时,asXML 将再次将文件保存为 UTF-8。一旦我插入特殊字符,它就会以 ANSI 编码保存,导致文件混乱,因为我将无法打开它(脚本会抱怨编码不正确)。

我错过了什么?阅读手册给我的印象是我应该做的一切都很好(即不要弄乱$_GET['content']),所以很遗憾我不知道。

非常感谢!

【问题讨论】:

    标签: php utf-8 simplexml


    【解决方案1】:

    您的特殊字符看起来不是 UTF-8,而是 ISO-8859-1 字符

    请看这里 - http://www.degraeve.com/reference/urlencoding.php

    可能的解决方案

    $newentry = $xml->addChild('element', htmlentities($write));
    

    或者

    $newentry = $xml->addChild('element', iconv('ISO-8859-1', 'UTF-8', $write));
    

    题外话,请避免使用$_GET 写入文件或插入数据库,有风险

    【讨论】:

    • 谢谢! 2 号成功了,尽管我仍然不明白为什么 URL 编码的特殊字符会被翻译成 ISO-8859-1 而不是 UTF-8(当我的 PHP 文件是 UTF-8 时)。不管怎样,谢谢!
    • 只是因为输入不是UTF-8,也许你需要检查你如何构造$_GET
    • 但是我将如何对查询字符串进行 UTF-8 编码?顺便说一句,感谢您提供的安全提示,我知道这一点并“已采取措施”。
    • 好的,明白了,我根本不编码......我自己应该想到的,问题是我不知道百分比编码的特殊字符会导致ISO 编码。非常感谢!
    猜你喜欢
    • 2016-10-11
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2010-11-14
    • 2013-12-21
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多