[php] charset bepalen en dan omzetten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Mbv een crawler haal ik gegevens op van verschillende sites. Deze sla ik op in een database.

Echter zit ik met de character encoding. Hoe kan ik als ik gegevens heb van een bepaalde site de character encoding bepalen? Ik kan natuurlijk de meta tag inlezen, maar ik vroeg me af of ik niet met behulp van een functie de character encoding van de waarde in een string kan bepalen.

Ik heb al gekeken naar iconv en aanverwante functies, maar deze zijn volgens mij niet geschikt.

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Deze geeft alleen weer of het ASCII is. Ik zoek iets dat als het niet ISO8859-1 is, dat hij dan detecteert wat het wel is, en dat ik dan met iconv het om kan zetten naar ISO8859-1.

ik krijg steeds meer het evrmoeden dan ASCII=ISO8895-1=Latin-1 ?? Kan iemand dat bevestigen? Ik zie door de bomen het bos niet meer met al die charsets!

[ Voor 30% gewijzigd door RSD op 17-02-2007 22:26 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

RSD schreef op zaterdag 17 februari 2007 @ 18:04:
Echter zit ik met de character encoding. Hoe kan ik als ik gegevens heb van een bepaalde site de character encoding bepalen? Ik kan natuurlijk de meta tag inlezen
De content-type http header moet je hebben, en daarna een eventuele meta-tag indien aanwezig. Zodra je deze gegevens ophaalt dan kan je daarmee verder en weet je 100% zeker dat je het doet zoals de eigenaar van de betreffende site het bedoeld had. Hoewel ik het persoonlijk handiger vind om dit soort dingen af te spreken met die eigenaar zodat je bijvoorbeeld een eigen XML stream ofzo krijgt, dat is immers veel eenvoudiger.

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hoe vraag je zo een header op en als je die hebt, hoe kun je dan de charset bepalen als er geen meta tag aanwezig is die de charset beschrijft? Google haalt bijv van allerlei sites gegevens af en converteert dit naar UTF-8. Hoe zouden zij bijv de charset bepalen van de huidige site? Ik heb nu het probleem dat deze continue verandert is en op mijn pagina staan vaak rare tekens .

[ Voor 45% gewijzigd door RSD op 19-02-2007 12:49 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

RSD schreef op maandag 19 februari 2007 @ 12:47:
Hoe vraag je zo een header op en als je die hebt, hoe kun je dan de charset bepalen als er geen meta tag aanwezig is die de charset beschrijft?
Lees je eens in over hoe HTTP werkt, en je komt erachter dat headers _voor_ de daadwerkelijke data verstuurd worden, dit is dus ook het eerste wat je ontvangt tot een lege regel, daarna begint de data die je opgevraagd had.

Voorbeeld, de headers van deze pagina zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Date: Mon, 19 Feb 2007 12:01:50 GMT
Server: Apache/1.3.37 (Unix) PHP/4.4.4 mod_gzip/1.3.26.1a
Vary: Accept-Encoding
X-Powered-By: PHP/4.4.4
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Mon, 19 Feb 2007 12:01:50 GMT
Cache-Control: post-check=1, pre-check=2, max-age=1, must-revalidate
P3P: CP="CUR ADM OUR NOR STA NID"
Content-Encoding: gzip
Content-Length: 9351
Connection: close
Content-Type: text/html; charset=iso-8859-15

en daar staat een mooie charset bij de content-type header :)

en verder staat hier in de HTML ook nog eens een meta tag waarin de charset beschreven wordt:
HTML:
1
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">


In dit geval gebruik je dan de charset die in die meta-tag staat, en als die er niet is dan neem je die uit de http headers.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Erkens schreef op maandag 19 februari 2007 @ 13:06:
[...]
In dit geval gebruik je dan de charset die in die meta-tag staat, en als die er niet is dan neem je die uit de http headers.
Nee, juist andersom ;)

Intentionally left blank

Pagina: 1