curl dom utf8 htmlspecialchars中的奇怪â字符无法正常工作

时间:2018-01-20 04:36:21

标签: php curl utf-8

我有一个奇怪的角色 - 在卷曲请求中出现而不是引号和双引号

  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');

我正在使用php domelement来操作结果

$fulltext = $doc->getElementsByTagName('p');
foreach($fulltext as $para) {
  $fulltextstr .= $para->textContent;
}

它的作用大部分除了引号和双引号被替换为â,我该如何替换它。

我试过

echo htmlspecialchars($ fulltextstr,ENT_SUBSTITUTE,'UTF-8');

但这不会删除字符,有没有办法通过替换清除输出,或者如果不可能那么删除这些字符!?

获取此链接时出现此问题: https://www.dissentmagazine.org/article/coping-economy-mindfulness-goes-corporate

更多详情

我在元标题中设置了utf-8,我正在使用

mb_regex_encoding('UTF-8');
mb_internal_encoding('UTF-8'); 

网站标题设置为UTF-8:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我还应该做什么?!

2 个答案:

答案 0 :(得分:0)

字符检测为UTF-8并且看起来很好,我看到了与您描述的类似的问题。
虽然这不是一个完美的答案,但它是一种解决方法。

您可以在使用字符串之前简单地替换这些字符(和其他特定字符)。

str_replace(
    [
        "\xe2\x80\x98", 
        "\xe2\x80\x99", 
        "\xe2\x80\x9c", 
        "\xe2\x80\x9d", 
        "\xe2\x80\x93", 
        "\xe2\x80\x94", 
        "\xe2\x80\xa6"
    ], 
    [
        "'", 
        "'", 
        '"', 
        '"', 
        '-', 
        '--', 
        '...'
    ], 
    $text
);

这将仅使用引号替换左右引号,左引号和右引号仅使用双引号,以及带匹配符号的连字符,短划线和椭圆字符。

答案 1 :(得分:0)

我使用以下内容对其进行修补,这会产生干净的输出,第一行是删除&#34;&amp; nbsp&#34;被显示为黑钻石问号的角色。

Array
(
    [0] => Array
        (
            [date] => 01/01/18
            [name] => Medicine,Drugs
        )

    [1] => Array
        (
            [date] => 02/01/18
            [name] => Medicine,Drugs,My Drugs
        )

)

这不是一个强大的解决方案,因为我期望原始的utf8能够正常显示但是我发现如果我必须使用utf8_decode,那么我的网站不能正确使用utf8 ...我该如何解决这个问题? !我在header meta中设置了utf8,并且我使用了mb_regex_encoding(&#39; UTF-8&#39;)和mb_internal_encoding(&#39; UTF-8&#39;),数据库是还有utf8,我还缺少什么?!