ugrás a tartalomhoz

Karakter kódolás kiolvasása Meta tagból

lotanujo · 2011. Feb. 7. (H), 11.56
Sziasztok!

Különböző kódolású weboldalakat indexelek és a meta adatait mentem.
Ezt használom ehhez: http://php.net/manual/en/function.get-meta-tags.php

Az <meta name="author" content="name">
<meta name="keywords" content="php documentation">
<meta name="DESCRIPTION" content="a php manual">
stb adatokat szépen kiolvassa, de a különböző kódolású weboldalak miatt az elmentésnél gondjaim vannak.

Tudom, hogy ezen az oldalon mutatnak példát arra is, hogy a Meta adatokból, hogyan lehet kiolvasni a karakter kódolást
(<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />)
de nekem az már kínai és nem tudtam vele mit kezdeni.

Valaki leegyszerűsítené nekem, hogy hogyan tudom kinyerni egyszerűen, hogy egy weboldal utf-8, iso-8859-2, iso-8859-1, stb.. kódolású-e, hogy azután az infókat ez alapján átalakíthassam és úgy menthessem el?

Köszönöm.
 
1

get_headers()

solkprog · 2011. Feb. 7. (H), 12.15
ugyan nem a meta -tagból szedi, hanem a header-ből de használd a get_headers().
(ahogy nézem a get_meta_tags() nem adja vissza a charset-et, mert annak a meta tagnak nincs name tulajdonsága. De egyébként is header-ből célszerűbb ezt olvasni, mert a header nagyobb prioritással határozza meg az oldal kódolását, mint a meta tag.)
2

nincs

lotanujo · 2011. Feb. 7. (H), 13.43
Köszi a tippet, de azt vettem észre, hogy nem minden weboldal headers-részében van benne a karakter kódolása.
A meta-ból nem lehetne ezt kinyerni?
3

A meta-ból nem lehetne ezt

kuka · 2011. Feb. 7. (H), 14.17
A meta-ból nem lehetne ezt kinyerni?
De igen, de a HTML parse-olás nem triviális feladat.

Az általad említett PHP dokumentáció lapon a hozzászólások között például van egy reguláris kifejezés alapú megoldás, amely csak akkor működik ha
  • a http-equiv vagy meta attribútum előbbre van mint a content attribútum
  • az attribútumok értékei idézőjelek közt vannak
Természetesen ha mások által írt HTML-t elemezgetsz, akkor a fenti követelményeket nehéz betartani. Főleg ha figyelembe vesszük a HTML5 szintaxisát, ahol a charset-nek sajátos szintaxisa van. Ezen felül még vannak a szintaktikai okádékok amelyek csak halványan hasonlítanak a szabványokra.

Javaslom, hogy próbálj ki inkább egy HTML parse-oló rutinkönyvtárat, például PHP Simple HTML DOM Parser.
4

mb_check_encoding($string, 'UTF-8');

solkprog · 2011. Feb. 7. (H), 14.22
Lekéred a HTML-t, és ráengedsz (pár) mb_check_encoding()-et. (mondjuk hálózatról származó szövegnél nem tartom elképzelhetetlennek hogy hibásan fogja visszaadni a charset-et.)
Vagy a htmlből nyered ki (regexp-el, vagy valamilyen DOM osztállyal) a charset-es meta tag értékét.