Php uzaktan charset Algılama

2 Cevap php

Ben Content-Type başlık etiketi tespiti yoluyla uzak bir sayfanın kodlamasını belirlemek istiyorum

<meta http-equiv="Content-Type" content="text/html; charset=XXXXX" />

varsa.

I retrieve the remote page and try to do a regex to find the required setting varsa. I am still learning hence the problem below... Here is what I have:

    $EncStart = 'charset=';
    $EncEnd = '" \/\>';
    preg_match( "/$EncStart(.*)$EncEnd/s", $RemoteContent, $RemoteEncoding );
    echo = $RemoteEncoding[ 1 ];

The above does indeed echo the name of the encoding but it does not know where to stop so it prints out the rest of the line then most of the rest of the remote page in my test. Example: When testing a remote russian page it printed:

windows-1251" />
rest of page ....

Hangi $EncStart tamam olduğu anlamına gelir, ama regex ve $EncEnd parçası eşleşen durdurmak için başarısız oldu. Bu meta başlık genellikle kodlama adından sonra 3 farklı olasılığı biter.

"> | "/> | " />

Ben bu maching sonuna karşılamak için kullanılabilir ve evet bunu nasıl kaçacağını eğer hava bilmiyorum. Bunu yapmanın farklı yolları ile oynadı ama hiçbiri çalıştı.

Bir el kredi için şimdiden teşekkür ederiz.

2 Cevap

olmayan açgözlü yapmak için desen bir soru işareti eklemek (ve 's' da artık gerek yoktur)

preg_match( "/charset=\"(.+?)\"/", $RemoteContent, $RemoteEncoding );
echo $RemoteEncoding[ 1 ];

Bu charset = "..." veya charset='...' ve diğer birçok kombinasyonları idare unutmayın.

Simple HTML Dom Parser bir göz atın. Bununla beraber, kolayca Regexes hantal başvurmadan kafasından charset bulabilirsiniz. Ama David zaten yorumladı gibi, siz de aynı bilgi için the headers incelemek gerekir ve bulursa onu öncelik.

Test örneği:

require_once 'simple_html_dom.php';

$source = file_get_contents('http://www.google.com');
$dom = str_get_html($source);
$meta = $dom->find('meta[http-equiv=content-type]', 0);
$src_charset = substr($meta ->content, stripos($meta ->content, 'charset=') + 8);

foreach ($http_response_header as $header) {
    @list($name, $value) = explode(':', $header, 2);
    if (strtolower($name) == 'content-type') {
        $hdr_charset = substr($value, stripos($value, 'charset=') + 8);
        break;
    }
}

var_dump(
    $hdr_charset,
    $src_charset
);