Autor | Zpráva | ||
---|---|---|---|
1Pupik1989 Profil |
#1 · Zasláno: 27. 9. 2011, 20:38:29
Dobrý den, obracím se na vás po douhé době z menší prosbou. Napsal jsem si parser na stránky, respektive to bude načítat videa. Problém je, že nemůžu převést správně kódování na WINDOWS-1250. Kódování určuji funkcí mb_detect_encoding(). Problém je v tom, že se znaky stejně nepřevedou jak mají.
Přidávám zdrojový kód: <?php header('Content-Type: text/html; charset=windows-1250'); $url="http://www.youtube.com/watch?v=kKXcgqpBj1o&feature=fvst"; //$url="http://www.stream.cz/video/614021-jak-vycistit-poskrabane-cd"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_NOBODY, FALSE); // remove body curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $exec = curl_exec($ch); $charset = mb_detect_encoding($exec); $doc = new DOMDocument(); if($doc->loadHTML($exec)){ $meta["title"] =$doc->getElementsByTagName('title')->item(0)->nodeValue; $tags = $doc->getElementsByTagName('meta'); foreach($tags as $items){ $name = $items->getAttribute('name'); $property = $items->getAttribute('property'); $content = $items->getAttribute('content'); $content = iconv($charset, "cp1250//IGNORE", $content); if($name){ $meta[$name] = $content; } if($property){ $property = preg_replace("(.+\:)", "", $property); $meta[$property] = $content; } } echo "<pre>"; print_r($meta); }else{ //Nepovedlo se načíst video } ?> Otázka tedy zní: "Jak správně určit kódování tak, aby se text vždy převedl správně?". V kódu mám dvě URL. Ta ze streamu se načte správně, ale ta z youtube už ne, přičemž obě mají kódování UTF-8. |
||
Majkl578 Profil |
#2 · Zasláno: 27. 9. 2011, 20:55:49 · Upravil/a: Majkl578
Oba dokumenty jsou v UTF-8, proč to kódování neuvedeš přímo, ale snažíš se ho detekovat? Nevrací ti ta funkce
mb_detect_encoding třeba FALSE ? Tady se můžeš inspirovat jak detekovat různá kódování.
„Problém je v tom, že se znaky stejně nepřevedou jak mají.“ Které například? Ty, které v CP-1250 nemají ekvivalent? Nejsnazší a nejlepší bude nepoužívat CP-1250. |
||
1Pupik1989 Profil |
#3 · Zasláno: 27. 9. 2011, 21:54:40
mb_detect_encoding vrací v obou případech UTF-8. Snažší používat UTF-8 nebude, jelikož celý web je odjakživa ve windows-1250. Natvrdo kódoování nemám, protože všechny weby nemusí být v UTF-8. Každopádně i když změním celou stránku na UTF-8 včetně hlavičky, tak výsledek je stejný. Kdyby to šlo pouze změnou hlavičky a kódování stránky, pak by nebyl problém nastavit znakovou sadu pro připojení databáze. mb_detect_encoding vrací v obou případech UTF-8. Snažší používat UTF-8 nebude, jelikož celý web je odjakživa ve windows-1250. Natvrdo kódoování nemám, protože všechny weby nemusí být v UTF-8. Každopádně i když změním celou stránku na UTF-8 včetně hlavičky, tak výsledek je stejný. Kdyby to šlo pouze změnou hlavičky a kódování stránky, pak by nebyl problém nastavit znakovou sadu pro připojení databáze.
|
||
1Pupik1989 Profil |
#4 · Zasláno: 28. 9. 2011, 18:36:48
Tak jsem to vyřešil přidáním hlavičky s kódování do loadHTML();
|
||
Časová prodleva: 13 let
|
0