我正在基于“Simple HTML DOM”编写脚本,我想在获取URL的内部文本后检测字符串的字符集,然后使用
iconv()
将其转换为“UTF-8”。我已经尝试了很多方法,但是没有一种方法适用于Windows-1256
。 我所尝试过的有:mb_detect_encoding($content)
将Windows-1256
检测为UTF-8
。
mb_detect_encoding($content, "windows-1256")
会出现错误Illegal argument
。
function is_utf8($string) {
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
如果不是 UTF-8 编码,此函数将返回“0”,但当字符串为UTF-8编码时,它会返回“页面无法找到”。我不确定原因!
我的代码如下:
$html = file_get_html($url);
foreach($html->find('div[id=content]') as $element) {
$content = $element->innertext;
#Detect charset encoding of $content
}
我正在处理的链接:
UTF-8: http://www.masrawy.com/news/Egypt/Politics/2013/March/3/5541050.aspx
Windows-1256: http://www.youm7.com//News.asp?NewsID=965545
if(!is_utf8($t2)) echo $t2=utf8($t2)."<br/>"; else echo $t2."<br/>";
- Salem