gpt4 book ai didi

php - XMLWriter (PHP) 的编码问题

转载 作者:行者123 更新时间:2023-12-02 07:41:58 25 4
gpt4 key购买 nike

使用这个简单的 PHP 代码:

$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');

$xmlWriter->writeElement('test', $data);

$xmlWriter->endDocument();
$xmlWriter->flush();

XMLWriter 类有一个很好的特性:它将您提供给它的任何数据转换为输出编码。例如,它会将 $data 转换为 UTF-8,因为我在 startDocument 函数中传递了 'utf-8'

问题是,在我的例子中,$data 的内容来自输出格式为 UTF-8 的数据库,因此已经是 UTF-8。 XMLWriter 可能认为数据是 ISO-8859-1 并将其再次转换为 UTF-8,我得到奇怪的符号我应该得到重音。

目前我在来自数据库的每个字符串周围使用 utf8_decode,这意味着我正在从 UTF-8 转换为 ISO-8859-1,然后 XMLWriter 将其转回 UTF- 8.

这有效但不干净:

$xmlWriter->writeElement('test', utf8_decode($data));

是否有更清洁的解决方案?

编辑:显示完整示例

$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');
$xmlWriter->startElement('usersList');

$database = new PDO('mysql:host=localhost;dbname=xxxxx', 'xxxxx', 'xxxxx');
$database->exec('SET CHARACTER SET UTF8');
$database->exec('SET NAMES UTF8');
foreach ($database->query('SELECT name FROM usersList') as $user)
$xmlWriter->writeElement('user', $user[0]); // if the user's name is 'hervé' in the database, it will print 'hervé' instead

$xmlWriter->endElement();
$xmlWriter->endDocument();
$xmlWriter->flush();

最佳答案

我不确定您从哪里得到 XMLWriter 转换编码的想法。它没有。您必须为其提供 utf-8。它可以输出不同的编码,但输入的字符串必须是utf-8。

这里可能会发生两件事之一:

  1. 无论您使用什么来查看,您的输出文档都将字符串解释为 win-1252。如果您在浏览器中查看输出,您可能需要像这样设置内容类型 header :header('Content-Type: application/xml; charset=UTF-8');
  2. 您在数据库中存储的数据不正确,您的“é”实际上是两个 Unicode 字符“É”。解决这个问题很困难。

关于php - XMLWriter (PHP) 的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com