4


我正在处理基于“简单 HTML DOM ”的脚本,我想在获取 URL 的内部文本后检测字符串的字符集,以使用iconv().
我已经尝试了很多东西,但没有一个可以与Windows-1256.
我试过的: -

mb_detect_encoding($content)检测Windows-1256UTF-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
}

我正在使用的 URL:
UTF-8: http: //www.masrawy.com/news/Egypt/Politics/2013/March/3/5541050.aspx
Windws-1256:http ://www.youm7.com/ /News.asp?NewsID=965545

4

2 回答 2

5

您是否尝试过使用

function is_utf8($string) {
  return (mb_detect_encoding($string, 'UTF-8', true) == 'UTF-8');
}

这适用于您指定的 URL。

另外,在测试几个不同的选项时,我的 masrawy.com 网站经常无法加载(也许是为什么您可能会看到“找不到页面”)...

奇怪的是,像你一样尝试使用正则表达式导致 PHP 在我的 Windows 安装中完全自杀,从而导致 Apache 崩溃。

于 2013-03-03T20:59:32.050 回答
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) 
于 2015-06-20T19:57:24.677 回答