我在 php 中有一个旧的大应用程序,它使用 XML (DOMDocument)。
该应用程序适用于 PHP 5.2.5
$dom = new DOMDocument("1.0", "iso-8859-15");
$dom->formatOutput = true;
...
$node->setAttribute('attr', 'value_with_éàè');
$str = $dom->saveXML();
$str 被发送到 Flex,一切正常。
现在,我们必须更改我们的服务器。 PHP 的新版本是 5.2.13。
在此版本中,函数 setAttribute 失败。 (字符串不是 utf-8.....)
如果我看 $str,字符串在第一个重音处被切断。
如果我使用 utf8_encode 作为属性,则代码有效。问题是会花很多时间来解析代码并添加utf8_encode.....
我正在寻找一个变量、一个标志或其他东西来保持应用程序像旧版本的 php 一样工作。
有诀窍吗?
最佳答案
到过那里。我感觉到你的痛苦。字符编码问题本身就是一种痛苦。将 MySQL、php 和网络服务器添加到组合中,您将有一些棘手的问题需要解决。
首先,可以将您的工具集配置为使用 IS0-8859-15。
您必须确保您使用的每个工具、php、mysql 服务器、mysql-client(可通过 my.conf 或在 php 中配置)和 webserver 都为这个角色集配置。您还必须确保数据库表是 ISO-8859-15,不要在任何未为 ISO-8859-15 配置的东西中传输或打开数据,例如......(咳咳 phpMyAdmin。)
我曾经遇到过问题,因为我在将 db dump 加载到 ISO-8859-1 DB 之前在我的 UTF8 编辑器中打开了它,并且只是在编辑器中打开并重新保存它会损坏带有 UTF8 转换的文件。当然这些问题让你想撞墙但是相信我,按照上面的步骤,找到使用 UTF-8 的工具从 DB 开始,然后从那里开始,你将能够在不改变的情况下为那些特殊字符提供服务你的代码。
祝 friend 好运。
关于php - 不同版本的php之间DOMDocument中的重音问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5947171/