当前位置: 首页 > 面试题库 >

php:每当我尝试编写UTF-8时都使用DomDocument,它会以十六进制表示

安聪
2023-03-14
问题内容

当我尝试使用DomDocument将UTF-8字符串写入XML文件时,实际上是写入字符串的十六进制表示法,而不是字符串本身。

例如:

ירושלים

代替:ירושלים

任何想法如何解决问题?


问题答案:

好了,你去:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->appendChild($dom->createElement('root'));
$dom->documentElement->appendChild(new DOMText('ירושלים'));
echo $dom->saveXml();

会正常工作,因为在这种情况下,您构造的文档将保留指定为第二个参数的编码:

<?xml version="1.0" encoding="utf-8"?>
<root>ירושלים</root>

但是,一旦将XML加载到未指定编码的Document中,您将丢失在构造函数中声明的所有内容,这意味着:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXml('<root/>'); // missing prolog
$dom->documentElement->appendChild(new DOMText('ירושלים'));
echo $dom->saveXml();

不会使用utf-8编码:

<?xml version="1.0"?>
<root>&#x5D9;&#x5E8;&#x5D5;&#x5E9;&#x5DC;&#x5D9;&#x5DD;</root>

因此,如果您加载XML,请确保它是

$dom = new DOMDocument();
$dom->loadXml('<?xml version="1.0" encoding="utf-8"?><root/>');
$dom->documentElement->appendChild(new DOMText('ירושלים'));
echo $dom->saveXml();

它将按预期工作。

或者,您也可以在加载文档后指定编码。



 类似资料:
  • 进程 c:在函数“主要”中: prog.c:35:20:警告:格式“%d”需要类型为“int”的参数,但参数3的类型为“void * ”[-w format =]printf(" \ n % c \ t % d \ t identifier \ n ",c,p);^ prog. c: 47:24:警告:格式'%d'需要类型'int'的参数,但参数3的类型'void*'[-Wformat=]prin

  • 问题内容: 我正在尝试使用DOMDocument解析一些HTML,但是当我这样做时,我突然失去了编码(至少这对我来说是这样)。 这段代码的结果是我得到了一堆不是日语的字符。但是,如果我这样做: 正确显示。我尝试过saveHTML和saveXML,但都无法正确显示。我正在使用PHP 5.3。 我所看到的: 应该显示什么: 编辑:我已经将代码简化为五行,因此您可以自己对其进行测试。 这是返回的html

  • 我有一个latin1_swedish_ci数据库,其中包含UTF-8字节字符,显示为%c5%a1,%c4%8d,... 我已经将数据库和表从latin1转换为utf8,但我仍然需要修复UTF-8字节字符。 MySQL默认字符集: 我尝试了MySQL函数没有成功: 我真的需要帮助!谢谢.

  • 我的游戏是统一的。当我试图上传游戏apk时,它显示了这个错误。 未优化APK警告: 此APK导致未使用的代码和资源被发送到用户。如果您使用Android应用捆绑包,您的应用程序可能会更小。如果不针对设备配置优化应用,则应用下载和安装在用户设备上的容量会比所需的要大。较大的应用程序安装成功率较低,占用用户设备上的存储空间。 决议: 使用Android应用程序包自动优化设备配置,或使用多个APK自行管

  • 所以我只想使用谷歌云视觉应用编程接口从图像中检测文本或标签。但是当我运行这段代码时,我总是得到: 但我不知道为什么。。。下面是我得到的完整json输出: 我的测试代码如下: 所以问题是。。此代码有什么问题?

  • 问题内容: 网络服务器使用utf-8编码提供响应,所有文件都使用utf-8编码保存,我所知的所有设置都已设置为utf-8编码。 这是一个快速程序,用于测试输出是否有效: 该程序的输出为: 呈现为: 我可能做错了什么?我必须告诉DomDocument正确处理utf-8的具体程度是多少? 问题答案: 需要一个HTML字符串。 HTML 根据其规范使用默认的编码(ISO拉丁字母1号)。那是因为更长,请参