4


私は「 Simple HTML DOM 」 に基づくスクリプトに取り組んでおり、URL の内部テキストを取得した後、文字列の文字セットを検出して、.xml を使用して「UTF-8」に変換したいと考えていますiconv()
私は多くのことを試しましたが、それらのどれもで動作しません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
}

私が使用している 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 に答える