Autor Zpráva
Fisir
Profil
Ahoj, obracím se na vás po týdnu neúspěšného zkoušení všeho možného. Načtu si řetězec do DOMDocumentu:
$dom = new DOMDocument();
$dom->encoding = 'UTF-8';
$dom->loadHTML('<?xml encoding="UTF-8"><div id="container">'.$text.'</div>', LIBXML_NOENT);
Následně s ním provádím různé operace (+ XPath) a poté si jej opět uložím do proměnné:
$parsed = $dom->saveHTML();
I když zakomentuji všechny úpravy, které s dokumentem provádí, automaticky mi zaentituje české znaky. Evidentně to není chyba jen mého localhostu, projevuje se to i na hostingu. Funkci html_entity_decode() použít nemůžu a nahrazování pomocí str_replace() moc nechci, protože nevím, jaké všechny znaky se mohou v textu objevit. Na Stackoverflow zatím nikdo neví, ví nějaká československá hlava?

ěščřžýáíé vrací ě&scaron;čřž&yacute;&aacute;&iacute;&eacute;.
Jan Tvrdík
Profil
Fisir:
Co takhle loadXml?


Případě pokud se bavíme o Automatické vytvoření odstavců, tak řešením je prostě dát do HTML meta tag s kódováním:
<meta http-equiv="content-type" content="text/html;charset=utf-8">
Tori
Profil
Fisir:
nevím, jaké všechny znaky se mohou v textu objevit.
Funkce get_html_translation_table nevyhovuje?
Fisir
Profil
Reaguji na Jana Tvrdíka:
loadXML() mi vstupní text nesežere (není well-formed).

<meta http-equiv="content-type" content="text/html;charset=utf-8">
To snad ne. Zkoušel jsem opravdu spoustu deklarací, a žádná jiná, která definuje kódování nezabrala. Díky moc!
Jan Tvrdík
Profil
Fisir:
Dneska jsem si s tím hrál a zjistil, že s novým PHP* mi funguje i <meta charset="utf-8">. A dokonce záleží i na tom, jestli voláš saveHTML s parametrem nebo bez. Zkus si schválně u sebe:

$doc = new DOMDocument();
$doc->loadHTML('<meta http-equiv="content-type" content="text/html;charset=utf-8">třešně');
echo $doc->saveHTML(), "\n\n";

$doc = new DOMDocument();
$doc->loadHTML('<meta charset="utf-8">třešně');
echo $doc->saveHTML(), "\n\n";

$doc = new DOMDocument();
$doc->loadHTML('<meta http-equiv="content-type" content="text/html;charset=utf-8">třešně');
echo $doc->saveHTML($doc->getElementsByTagName('body')->item(0)), "\n\n";

$doc = new DOMDocument();
$doc->loadHTML('<meta charset="utf-8">třešně');
echo $doc->saveHTML($doc->getElementsByTagName('body')->item(0)), "\n\n";

*Ve skutečnosti nezáleží na verzi PHP, ale na verzi libxml se kterou bylo PHP zkompilováno.

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