解析时作为 â 出现的字符(弯引号、破折号等)XML

Characters (curved quotes, dash, etc.) coming as â on parsing XML

我正在尝试解析 Guardian RSS 提要 (Link)。提要包含弯引号 (” ’ “ ‘)、破折号 (-) 和带重音符号的字符 (Orbán)。

当我在 HTML 页面上解析和显示文本时,这些字符在 'description' 部分中显示为 â(用于引号和短划线)、¡(用于 á)等.我如何让它们正确解析?

代码

$xml = simplexml_load_file($link);
    for($i = 0; $i < 30; $i++){
        $title = $xml->channel->item[$i]->title;
        $description = $xml->channel->item[$i]->description;
        $count = 0;
        $para = "";
        $doc = new DOMDocument();
        @$doc->loadHTML($description);
        while($count<3){
              if($count==0){
                  $para = $doc->getElementsByTagName('p')->item($count)->nodeValue;
              }else{
                  $para = $para."<br><br>".$doc->getElementsByTagName('p')->item($count)->nodeValue;
              }
              $count++;
        }
        echo "<tr>";
        echo "<td>" . $title . "</td>";
        echo "<td>" . $para . "</td>";
        echo "</tr>";
     }

我的 'head' 部分有以下行。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

标题部分显示正确。这可能是因为他们在标题中使用直引号 ('),在描述中使用弯引号 (')。但正如您所见,á 也在标题中正确显示。

问题出在 loadHTML 行。除非指定,否则它不会将文本视为 UTF-8。

我替换了这一行

@$doc->loadHTML($description);

用这条线

@$doc->loadHTML('<?xml encoding="utf-8" ?>'.$description);

Check the original answer here.