提问人:Christopher Kellett 提问时间:10/2/2023 最后编辑:Christopher Kellett 更新时间:10/9/2023 访问量:39
在 PHP 中将 UTF-8 字符串附加到 DOMNode
Appending UTF-8 strings to DOMNode in PHP
问:
我已经决定在我的特定项目中,我想使用 PHP 将 CSS 与 HTML 一起交付。我的 CSS 和 HTML 是从各种 UTF-8 文件中收集的。HTML 编码保留在输出中,但 CSS 编码不保留。我正在将非 ASCII 字符转义为 .奇怪的是,我可以在没有转义的情况下使用CSS字符串,但我不能将其附加为或不将其转义文本。我尝试了 、 、 、 、我不在乎输出是如何编码的(尽管 UTF-8 是最好的),只要 CSS 中的字符显示为字符即可。&#nnnnn;
var_dump
&#nnnnn;
DOMText
DOMCDATASection
htmlentities()
html_entities_decode()
mb_convert_encoding()
mb_detect_encoding()
utf8_encode()
utf8_decode()
createTextNode()
createCDATASection()
我的原始代码是这样的:
<?php
$document = new DOMDocument();
$document->loadHTMLFile("text.html");
$document->formatOutput = true;
$xPath = new DOMXpath($document);
$head = $xPath->query("//html/head")[0];
$styleElement = $document->createElement("style");
$styleElement->setAttribute("type", "text/css");
$styles = $document->createTextNode(file_get_contents("style.css"));
$styleElement->appendChild($styles);
$head->appendChild($styleElement);
echo $document->saveHTML();
?>
HTML格式:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>Put a ✧ before this.</p>
</body>
</html>
CSS格式:
@charset "utf-8";
p::before {
content: '✧';
}
输出:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">p::before {
content: '✧';
}
</style>
</head>
<body>
<p>Put a ✧ before this.</p>
</body>
</html>
(浏览器呈现的位置:Put a ✧ before this.
)
期望输出:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
p::before {
content: '✧';
}
</style>
</head>
<body>
<p>Put a ✧ before this.</p>
</body>
</html>
(浏览器呈现的位置:✧Put a ✧ before this.
)
(我知道有更简单的方法可以用 s 等完成上述示例,但使用 DOM 和 XPath 在更广泛的上下文中是有意义的。echo
答:
0赞
neopheus
10/2/2023
#1
确保选中编辑器中的“包含 Unicode (BOM) 签名”框
评论
0赞
Christopher Kellett
10/3/2023
好的,我添加了 BOM 签名,但输出没有变化......
评论
createCDATASection
createTextNode
createCDATASection
@charset "utf-8";
CDATASection