php - 字符编码和使用 Zend\Dom\Query

标签 php html encoding utf-8 zend-framework2

我在使用 Zend Framework 2 对波兰语字符进行编码时遇到问题。我使用:

use Zend\Dom\Query;

休息码:

$dom = new Query(); 
$document = '<ul id="test"><li>ęółąśłżźć</li><li>test</li></ul>';
$dom->setDocumentHtml($document);
$dom->setEncoding('utf-8');
$ul = $dom->execute('#test li');
foreach($ul as $li)
{
    echo $li->nodeValue;
}   

结果:

ÄóÅÄÅÅżźÄtest

enter image description here

如何正确显示这些字符?

我尝试使用 PHP 函数(iconv、utf8_encode)但没有成功。

最佳答案

在底层 Zend\Dom\Query 使用 DOMDocument它建立在 libxml 之上,其 HTML 解析器是为 HTML 4 制作的。其默认编码为 ISO-8859-1。

Query::setEncoding() 不会影响文档的加载方式。


解决方法:

第一次使用mb_convert_encoding将 ASCII 范围以上的任何内容转换为其等效的 html 实体。

$dom->setDocumentHtml(mb_convert_encoding($document, 'HTML-ENTITIES', 'UTF-8'));

或者修改指定 UTF-8 的元标记或 xml 声明。

$dom->setDocumentHtml('<meta http-equiv="Content-Type" content="charset=utf-8" />' . $document);
$dom->setDocumentHtml('<?xml encoding="UTF-8">' . $document);

关于php - 字符编码和使用 Zend\Dom\Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33133455/

相关文章:

php - 检查MySQL结果是否为空

php - 使用 PHP 生成统计信息(页面浏览量、唯一访问者)?

python - 如何使用python从网站中提取带有匹配词的html链接

html - 使用 CSS 设计多边形形状

javascript - 创建一个链接来下载文件

javascript - Ajax 请求中的文本显示不正确

linux - ffmpeg : Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, 速率、宽度或高度

php - jQuery 多复选框页面过滤器

php - 将 Uploadify 应用于新的 DOM 元素

java - Java 中的 Sax 解析器编码