我正在编写基于“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
Windws-1256:http://www.youm7.com//News.asp?NewsID=965545
答案 0 :(得分:4)
您是否尝试过使用
function is_utf8($string) {
return (mb_detect_encoding($string, 'UTF-8', true) == 'UTF-8');
}
这适用于您指定的网址。
另外,我测试了几个不同的选项时,我的masrawy.com网站常常无法加载(也许是为什么你可能会看到“无法找到页面”)...
奇怪的是,尝试使用像你这样的正则表达式导致PHP在我的Windows安装中完全自杀,从而使Apache陷入其中。
答案 1 :(得分:0)
这是完整的功能,根据马克答案和我之前使用的功能
function utf8($utf8){
if(mb_detect_encoding($string,'UTF-8',true) =='UTF-8');
return $utf8; else
$utf8=iconv("windows-1256","utf-8",$utf8);
return $utf8;
}
要使用它只需调用该函数,它将返回正确的值。
utf8($text)