PHP:Unicode节点值?

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

我试图从HTML字符串中提取所有链接文本和HREF,但源字符串是Unicode,nodeValue似乎无法处理这个问题

$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的应用程序中绝对没有必要。它仅仅掩盖了潜在的编码错误配置。