给出一个DOMDocument
,其样式表包含如下表情符号字符:
$dom = new DOMDocument();
$dom->loadHTML( "<!DOCTYPE html><html><head><meta charset=utf-8><style>span::before{ content: \"⚡️\"; }</style></head><body><span></span></body></html>" );
在将DOM序列化回HTML时,我发现了一些奇怪的行为。
如果我$dom->saveHTML( $dom->documentElement )
,那么我会得到(如所期望的那样):
<html><head><meta charset="utf-8">
<style>span::before{ content: "⚡️"; }</style>
</head><body><span></span></body></html>
但是,如果我改为$dom->saveHTML()
保存我得到的整个文档(错误):
<html><head><meta charset="utf-8">
<style>span::before{ content: "⚡️"; }</style>
</head><body><span></span></body></html>
请注意,表情符号“⚡️”是如何在样式表中编码为HTML实体⚡️
的,浏览器不喜欢这样,并且应将其视为文字字符串,因为CSS转义\26A1
应该代替。
我尝试设置$dom->substituteEntities = false
,但没有任何效果。
script
标记内也发生了相同的HTML实体转换,这在浏览器中引起了类似的问题。
通过在线PHP shell:https://3v4l.org/jMfDd
进行测试