我已经决定,在我的特定项目中,我想使用PHP提供CSS和HTML。我的CSS和HTML是从各种UTF-8文件中收集的。HTML编码保留在输出中,但CSS编码没有。非ASCII字符被转义为&#nnnnn;
。奇怪的是,我可以var_dump
没有&#nnnnn;
转义的CSS字符串,但我不能附加它作为DOMText
或DOMCDATASection
没有它转义的文本。我尝试过htmlentities()
,html_entities_decode()
,mb_convert_encoding()
,mb_detect_encoding()
,utf8_encode()
,utf8_decode()
,createTextNode()
,createCDATASection()
的各种组合,但无法完成这个简单的任务。我不关心输出是如何编码的(尽管UTF-8是最好的),只要CSS中的字符显示为字符即可。
我的原始代码是这样的:
<?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();
?>
超文本标记语言:
<!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.
)
(我知道有更简单的方法可以用echo
s等来完成上面的例子,但是在更广泛的背景下,使用DOM和DOM是有意义的。
1条答案
按热度按时间4dbbbstv1#
确保在编辑器中选中“Include Unicode(BOM)signature”复选框