iptcparse: charset der Werte ermitteln?

iptcparse: charset der Werte ermitteln?

am 21.08.2006 02:25:10 von viagra.magnet

Hallo,
gibt es eine Möglichkeit herauszubekommen welche Kodierung die IPTC
Daten haben die iptcparse ausspuckt?

Problem: Je nach OS liegen die IPTC Feldwerte mal in ascii, mal in
macroman, oder sonstwas vor und da das charset des HTML Dokuments mit
iso-8859-1 festgelegt ist, werden macroman kodierte Daten natürlich
falsch angezeigt.

Sollte man es nicht ermitteln können, dann würde ich mir damit behelfen,
daß ich den User den Part der "Erkennung" überlassen würde, und der
Funktion die die Daten 1:1 in die DB schreibt noch eine zur Seite Stelle
die explizit eine macroman->iso Umkodierung vornimmt. Nur:

nach vielem googeln kann ich kaum etwas für mich sachdienliches zu dem
Thema finden, außer das in PHP 5 bulids ab 5.0.0 Beta 3 htmlentities()
mit macroman umgehen kann.. gut, gibts nen Weg für php 3/4?

danke..
--
ben

Re: iptcparse: charset der Werte ermitteln?

am 21.08.2006 03:50:28 von Carsten Wiedmann

Ben Gurion schrieb:

> gibt es eine Möglichkeit herauszubekommen welche Kodierung die IPTC
> Daten haben die iptcparse ausspuckt?

iconv_get_encoding() könnte das.


> nach vielem googeln kann ich kaum etwas für mich sachdienliches zu dem
> Thema finden,

Das ist auch eigentlich die falsche Stelle. Du willst das PHP-Manual
befragen ;-)


> außer das in PHP 5 bulids ab 5.0.0 Beta 3 htmlentities()
> mit macroman umgehen kann.. gut, gibts nen Weg für php 3/4?

Obwohl hier tatsächlich das Manual dieses unterschlägt ;-) Da steht nichts
von MacRoman bei htmlentities() obwohl es im Quellcode steht. Mit iconv()
kannst du auch die Konvertierung vornehmen.

Allerdings wird es da mit PHP3 schwierig (Was ist das? Mal wieder ins Museum
gehen...). Da kannst du noch recode() nehmen. Oder was gerade MacRoman
angeht, die Funktion die du in den UCNs von htmlentities() findest.

Gruß
Carsten

Re: iptcparse: charset der Werte ermitteln?

am 21.08.2006 11:03:41 von news

Carsten Wiedmann wrote:
>> gibt es eine Möglichkeit herauszubekommen welche Kodierung die IPTC
>> Daten haben die iptcparse ausspuckt?
>
> iconv_get_encoding() könnte das.
>
> [...]
>
> Das ist auch eigentlich die falsche Stelle. Du willst das PHP-Manual
> befragen ;-)

Vielleicht möchtest Du das Manual auch mal befragen.
iconv_get_encoding() liefert dir lediglich die interne Konfiguration.

Das Encoding eines bestimmten Strings erfährt man damit jedenfalls nicht.

Liebe Grüße,

Alex

Re: iptcparse: charset der Werte ermitteln?

am 21.08.2006 13:52:20 von Carsten Wiedmann

Alexander Heß schrieb:

> Carsten Wiedmann wrote:
> > > gibt es eine Möglichkeit herauszubekommen welche Kodierung die IPTC
> > > Daten haben die iptcparse ausspuckt?
> >
> > iconv_get_encoding() könnte das.
>
> iconv_get_encoding() liefert dir lediglich die interne Konfiguration.

Danke. Da wär ich mal besser ins Bett gegangen, anstatt noch schnell was zu
Posten ;-)

Gemeint war eigentlich mb_detect_encoding(). Kennt aber leider kein
MacRoman.

Gruß
Carsten

Re: iptcparse: charset der Werte ermitteln?

am 21.08.2006 15:10:38 von viagra.magnet

Carsten Wiedmann wrote:

> Das ist auch eigentlich die falsche Stelle. Du willst das PHP-Manual
> befragen ;-)

Keine Sorge, das habe ich.. komme aber nicht weiter, daher bin ich so
frei hier mal zu fragen.

> Obwohl hier tatsächlich das Manual dieses unterschlägt ;-) Da steht nichts
> von MacRoman bei htmlentities() obwohl es im Quellcode steht. Mit iconv()
> kannst du auch die Konvertierung vornehmen.

Habe ich versucht mit iconv("MacRoman","ISO-8859-1",$string), aber dann
bricht iconv ab sobald ein nicht übersetzbares Zeichen im string
auftaucht, z.b. doppeltes Anführungszeichen unten.

> Allerdings wird es da mit PHP3 schwierig (Was ist das? Mal wieder ins Museum
> gehen...).

PHP3 muß nicht zwingend, aber eine Lösung die möglichst weit "runter"
reicht wäre halt schön.

> Da kannst du noch recode() nehmen. Oder was gerade MacRoman
> angeht, die Funktion die du in den UCNs von htmlentities() findest.

Ich hab mich um das Problem jetzt erstmal mit strtr herumgemogelt..
Schön wäre es wenn PHP sowas wie "iptc_data_get_encoding" aus
"libiptcdata" könnte.
-get-encoding>
--
ben

Re: iptcparse: charset der Werte ermitteln?

am 21.08.2006 16:57:55 von Carsten Wiedmann

Ben Gurion schrieb:

> Carsten Wiedmann wrote:
>
> Habe ich versucht mit iconv("MacRoman","ISO-8859-1",$string), aber dann
> bricht iconv ab sobald ein nicht übersetzbares Zeichen im string
> auftaucht, z.b. doppeltes Anführungszeichen unten.

Bei iconv() kannst du noch "//TRANSLIT" oder "//IGNORE" im 2. Parameter
benutzen. Oder da du eh schonmal htmlentities() angesprochen hast:
Konvertiere nach UTF-8 wo es dieses Problem nicht gibt und das auch von
htmlentities() immer beherrscht wird.

> Schön wäre es wenn PHP sowas wie "iptc_data_get_encoding" aus
> "libiptcdata" könnte.
> > -get-encoding>

Aber so wie es aussieht, erkennt das auch nur ob UTF-8 oder /irgendwas/
anderes benutzt wird? Dürfte dir also auch nicht wirklich helfen.

Gruß
Carsten

Re: iptcparse: charset der Werte ermitteln?

am 21.08.2006 21:56:57 von viagra.magnet

Carsten Wiedmann wrote:

> Oder da du eh schonmal htmlentities() angesprochen hast:
> Konvertiere nach UTF-8 wo es dieses Problem nicht gibt und das auch von
> htmlentities() immer beherrscht wird.

Ein htmlentities(iconv("Mac","UTF-8",$string), ENT_QUOTES, 'UTF-8')
funktionert prima wenn ne HTML Dastellung das Ziel wäre. Der string den
ich konvertieren will soll aber per javascript textarea/input Felder
befüllen, und da die Seite als iso-8859-1 ausgezeichnet ist (darauf habe
ich keinen Einfluß), brauche ich letztlich iso-8859-1.. (wobei ich mich
jetzt gleichzeitig frage wieso ich per Tastatur problemlos darin nicht
enthaltene Zeichen eintippen kann.. hmpf)

--
ben