PHP:preg_replace_callback匹配中文的問題

來源:互聯網
上載者:User
代碼:

$html = preg_replace_callback("/(?[\x{4e00}-\x{9fa5}]+)/u",array("self","wyc_chinese"),$html);...省略...public function wyc_chinese($matches){           return $matches['chinese'].'(Chinese)';}

問題:
$html為要提取的網頁資料
如果$html是utf8編碼的,則以上代碼能正常執行(即能正常提取中文),但如果是其他編碼的,則沒法正常執行(無法匹配到漢字)
使用iconv轉換$html的編碼格式,也無法正常提取中文。

回複內容:

代碼:

$html = preg_replace_callback("/(?[\x{4e00}-\x{9fa5}]+)/u",array("self","wyc_chinese"),$html);...省略...public function wyc_chinese($matches){           return $matches['chinese'].'(Chinese)';}

問題:
$html為要提取的網頁資料
如果$html是utf8編碼的,則以上代碼能正常執行(即能正常提取中文),但如果是其他編碼的,則沒法正常執行(無法匹配到漢字)
使用iconv轉換$html的編碼格式,也無法正常提取中文。

來識別編碼是錯誤的.有些網頁沒有寫meta,對於現代瀏覽器也會正常顯示的(IE6有問題,IE7,IE8沒測~)
應該根據HTTP回應標頭Content-Type: text/html; charset=UTF-8來判斷.如果沒有返回charset,就根據內容來自行判斷了..
為了方便,最好將html轉換為UTF-8來進行正則匹配.

 [        'method' => 'GET',    ],]);$html = file_get_contents($remote_url, false, $context);$html_encoding = mb_detect_encoding($html, ['UTF-8', 'CP936', 'ASCII']);//轉換為UTF-8$target_encoding = 'UTF-8';$html = $target_encoding === $html_encoding ? $html : mb_convert_encoding($html, $target_encoding, $html_encoding);//匹配$count = preg_match_all('#[\x{4e00}-\x{9fa5}]+#u', $html, $matches);var_dump($matches);

你這問題的核心是網頁編碼轉換成UTF-8

你說源編碼是"根據meta標籤的charset欄位來判斷的"

我也是這樣子做的, 不過我成功.

你沒給出詳盡代碼,我不知道是你的代碼哪裡出錯了,還是純粹是我的人品比你好.

require_once(__DIR__.'/wp-config.php');$resp = wp_remote_get('http://51nb.com/');$html = $resp['body'];preg_match('@charset=([-a-z0-9_]+)@i',$html,$charset);$html = iconv(strtoupper($charset[1]), "UTF-8", $html);preg_match_all("@\p{Han}+@u",$html,$m);     echo '';print_r($m);exit;

使用以上代碼的iconv

不使用以上代碼的iconv

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.