PHP ve UTF-8 XML yabancı karakterleri ile ilgili

2 Cevap php

Şu anda internetten bazı verileri kazıma ve xml belgeleri dönüştürülmesi duyuyorum.

  • kazınmış olan belge onun meta etiketleri göre utf-8

Sorun verilerin bazı yabancı karakterler içeriyor, ben güvenilir XML / utf-8 dostu varlıkları dönüştürerek bir yol bulamıyorum, aşağıdaki hatalar Ben okuyarak bulmayı başardık nelerdir, ben ideal bir çözüm gibi olur ki her zaman çalışmak istiyorum.

Örnek 1 düzgün çalışır, örnek 2 başarısız olur. Benim araştırma örneği 1 sabit, ama bir battaniye çözüm olarak görünmüyor.

Côte d'Ivoire  
Côte d'Ivoire (correct)  

- O - benim xpath aşağıdaki işlevini kullanarak doğru ayrıştırma ben başardı.

$w->text(charset_decode_utf_8((string)$match->a));

function charset_decode_utf_8($string) {
    if(@!ereg("[\200-\237]",$string) && @!ereg("[\241-\377]",$string)) {
        return $string;
    }
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e","'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string);
$string = preg_replace("/([\300-\337])([\200-\277])/e","'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",$string);
return $string;
}
ÖFB Stiegl Cup  
ÖFB Stiegl Cup (wrong)  

Ne yazık ki on - Ö - Duble varlık haline dönüştürülmüş olur. Ben uygun bir html varlığa dönüştürmek yapmak için nasıl hiçbir fikrim yok.

Ben denedim:

  • benim xml belgesini oluştururken iso-8859-1 kodlama kullanarak
  • utf-8 kodlaması ile htmlentitiesi kullanarak

Ben şeyler doğru kurtarmak için almaya çalışırken benim saç yırtılma olduğum gibi herhangi bir yardım büyük mutluluk duyacağız.

2 Cevap

UTF-8 (a proof ? it stores them in the webpages you are scraping) herhangi bir karakter saklamak için kullanılabilir; bu yüzden, neden varlıklar gibi bazı kodlar?

If you are opening XML documents and see problems with encoding, check the parameters of your editor : does it try to analyse the document as UTF-8 ? (Some editors don't, by default -- if you are opening a document on your hard disk with a browser, it might fail to recognize it as UTF-8 because there is no server to send any header indicating it's UTF-8)

Sorun bu değilse, bir yerde sorunlu XML belgesinin bir örneği yükleyebilirsiniz?

Varlık kodlama ile rahatsız etmeyin. Yerine CDATA blokları kullanın.

PHP UTF-8 anlamıyor. Bu bir bayt akışı olduğunu düşünüyor. Bu şekilde tedavi etmek için en iyi. Etrafta bayt mekik konum, ve yapmanız gereken hepsi çözümlü alamadım ve onlar doğru etiketli emin olun.