PHP:Unicode节点值?
我试图从HTML字符串中提取所有链接文本和HREF,但源字符串是Unicode,nodeValue似乎无法处理这个问题PHP:Unicode节点值?,php,unicode,utf-8,domdocument,nodevalue,Php,Unicode,Utf 8,Domdocument,Nodevalue,我试图从HTML字符串中提取所有链接文本和HREF,但源字符串是Unicode,nodeValue似乎无法处理这个问题 $links = array(); $titles = array(); $dom = new DOMDocument(); $dom->loadHTML( $str ); $hrefs = $dom->getElementsByTagName("a"); foreach ($hrefs as $href) { $links[] = $href->g
$links = array();
$titles = array();
$dom = new DOMDocument();
$dom->loadHTML( $str );
$hrefs = $dom->getElementsByTagName("a");
foreach ($hrefs as $href) {
$links[] = $href->getAttribute("href");
$titles[] = $href->nodeValue;
}
我的源字符串如下所示:
<p><a href='uploads/root/tr_62.pdf'>Türkiye</a></p>
Türkiye
如何使nodeValue尊重Unicode字符
谢谢你的关注 您经常使用mb\u convert\u编码
$dom = new DOMDocument();
$html_data = mb_convert_encoding($str , 'HTML-ENTITIES', 'UTF-8');
$dom->loadHTML( $html_data );
$hrefs = $dom->getElementsByTagName("a");
foreach ($hrefs as $href) {
$links[] = $href->getAttribute("href");
$titles[] = $href->nodeValue;
}
您经常使用mb_convert_编码
$dom = new DOMDocument();
$html_data = mb_convert_encoding($str , 'HTML-ENTITIES', 'UTF-8');
$dom->loadHTML( $html_data );
$hrefs = $dom->getElementsByTagName("a");
foreach ($hrefs as $href) {
$links[] = $href->getAttribute("href");
$titles[] = $href->nodeValue;
}
谢谢,用户Veve的评论回答了我的问题 以下行解决了我的问题:
$str = mb_convert_encoding( $str, 'html-entities', 'utf-8' );
谢谢,用户Veve的评论回答了我的问题 以下行解决了我的问题:
$str = mb_convert_encoding( $str, 'html-entities', 'utf-8' );
添加
标题时(“内容类型:text/html;charset=utf-8”)
到您的脚本(在第一次输出之前),它是否解决了问题?我在页面上有完整的HTML标题,等等。DOMDocument
和所有XML函数默认为UTF-8,因此它们可以很好地处理Unicode。从您的输出来看,是您的应用程序使用了一些单字节非Unicode编码或未能声明其编码(
标记基本上是不相关的,重要的是HTTP头,当然还有实际内容)。///现在把PHP代码分开。如果您复制并粘贴一个静态車
,它是否正确打印?当您添加标题(“内容类型:text/html;charset=utf-8”)
到您的脚本(在第一次输出之前),它是否解决了问题?我在页面上有完整的HTML标题,等等。DOMDocument
和所有XML函数默认为UTF-8,因此它们可以很好地处理Unicode。从您的输出来看,是您的应用程序使用了一些单字节非Unicode编码或未能声明其编码(
标记基本上是不相关的,重要的是HTTP头,当然还有实际内容)。///现在把PHP代码分开。如果您复制并粘贴一个静态車代码>,打印正确吗?这是Daniel的答案的副本,它不能“解决”问题,它通过将所有内容转换为7位US-ASCII来隐藏它。严格来说,这不是真的,它是链接到InVeve评论的答案的副本,Daniel和我都发布了该答案。直到我提交了我的答案,我才看到丹尼尔斯的答案。这很公平。在任何情况下,以完全重复的方式结束问题的想法并不是让相同的信息到处传播(就像刚刚发生的那样)。不管怎样,我认为这个问题实际上是不同的。我相信你的应用程序可能只是不支持UTF-8。这是丹尼尔的答案的副本,它不能“解决”问题,它通过将所有内容转换为7位US-ASCII来隐藏它。严格来说,这不是真的,它是链接到Veve评论中的答案的副本,我和丹尼尔都发布了该答案。直到我提交了我的答案,我才看到丹尼尔斯的答案。这很公平。在任何情况下,以完全重复的方式结束问题的想法并不是让相同的信息到处传播(就像刚刚发生的那样)。不管怎样,我认为这个问题实际上是不同的。我相信您的应用程序可能不支持UTF-8。这是一个解决方案,在启用UTF-8的应用程序中绝对没有必要。它只是掩盖了潜在的编码错误配置。这是一个解决办法,在一个支持UTF-8的应用程序中绝对没有必要。它仅仅掩盖了潜在的编码错误配置。