2013-03-03 4 views
3


"Simple HTML DOM"을 기반으로 스크립트 작업을하고 있는데 URL의 내부 텍스트를 가져온 후 문자열의 charset을 검색하여 "UTF -8 "을 입력하십시오.
많은 것을 시도했지만 그 중 Windows-1256과 작동하지 않습니다.
내가 무엇을 시도했다 : - 오류를 제공 Windows-1256
mb_detect_encoding($content, "windows-1256")UTF-8
PHP (UTF-8 또는 Windows-1256)에서 문자열의 문자 세트를 감지합니다.

mb_detect_encoding($content) 감지 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); 
} 

이 기능은 "0"으로하지 않을 경우 UTF-8 만 문자열 인 경우 반환 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 : 당신이

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

를 사용하여 시도 http://www.youm7.com//News.asp?NewsID=965545

답변

4

가 되세요 이것은 나를 위해 당신이 지정한 URL에서 작동합니다.

또한, 나는 몇 가지 다른 옵션을 테스트하는 동안 (당신이 "페이지를 찾을 수 없습니다"볼 수 있습니다 이유는 아마도)에 masrawy.com 사이트는 지속적으로 노력하고, 이상하게도 ...로드

실패했다 PHP가 아파치를 내 Windows 설치용으로 완전히 자살 한 것처럼 정규 표현식을 사용하십시오.

+0

이 작동 여부를 묻지 않은 것처럼 보입니다. 그래서 나는 그것을 테스트하고 작동합니다. 나도 같은 경우에 페이지가 windows1256 또는 UT-8입니다. 이것은 함수를 호출하고 다른 변환 함수 utf8()을 적용하는 방법입니다. 'if (! is_utf8 ($ t2)) echo $ t2 = utf8 ($ t2). "
"; else echo $ t2. "
";' –

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)