Autor Zpráva
1Pupik1989
Profil
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
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
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
Tak jsem to vyřešil přidáním hlavičky s kódování do loadHTML();

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0