Autor | Zpráva | ||
---|---|---|---|
MartinXYZ Profil * |
#1 · Zasláno: 2. 5. 2014, 17:13:56
Ahoj,
prosím o pomoc, celý den si s tím lámu hlavu, ale nedaří se mi... Nastíním jednoduchý příklad: <?php $title = file_get_contents("http://www.adresa.cz"); preg_match('~<title>(.+)</title>~Usi', $title, $title_out); $nazev = $title_out[1]; echo $nazev; ?> Skript vytáhne ze zadané adresy její název (to, co je mezi tagy TITLE). Stránku se skriptem mám kodovanou v UTF-8. Pokud tahám název ze stránek, které mají charset nastavený na UTF-8, není problém. Ale pokud tahám název ze stránky, která má charset např. windows-1250, zobrazí se mi místo znamének s diakritikou pouze nesmysly... Zkoušel jsem všechno možné, prohledal internet a nic. Zkoušel jsem i toto, ale bez úspěchu: ... echo mb_convert_encoding($nazev, "UTF-8"); Věděl by prosím někdo, jak na to? :-) Děkuji moc, Martin |
||
Alphard Profil |
#2 · Zasláno: 2. 5. 2014, 17:57:42
A jaké je původní kódování? Možná ho zkusit explicitně nastavit.
Zkuste to prohnat zde uvedenou funkcí autoUTF(). |
||
MartinXYZ Profil * |
#3 · Zasláno: 2. 5. 2014, 18:12:02
Moje stranka se skriptem ma kodovani UTF-8. Stranky, ze kterych ziskavam nazvy, maji pokazde jine kodovani (UTF-8, windows-1250, ...).
Kdyz ziskavam nazev ze stranek, ktere maji jine nez UTF-8 kodovani, vvznikne problem se zobrazenim znaku... |
||
Alphard Profil |
#4 · Zasláno: 2. 5. 2014, 18:34:22
Proto jsem navrhoval zkusit to autoUTF().
|
||
MartinXYZ Profil * |
#5 · Zasláno: 2. 5. 2014, 18:42:30 · Upravil/a: MartinXYZ
Ok, děkuju, snad to pomůže :-).
Ale mohl bys mi, prosím, lehce nastínit, jak mám tu funkci dostat do svého kódu? S PHP teprve začínám a opravdu si s tím nevím rady :-(. Zkusil jsem to nějak zbastlit. Je to takto správně? <?php function autoUTF($s) { // detect UTF-8 if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) return $s; // detect WINDOWS-1250 if (preg_match('#[\x7F-\x9F\xBC]#', $s)) return iconv('WINDOWS-1250', 'UTF-8', $s); // assume ISO-8859-2 return iconv('ISO-8859-2', 'UTF-8', $s); } $title = file_get_contents("http://www.adresa.cz"); preg_match('~<title>(.+)</title>~Usi', $title, $title_out); $nazev = $title_out[1]; echo autoUTF($nazev); ?> |
||
Časová prodleva: 10 let
|
0