PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Zeichensätze konvertieren, zB %20 als Leerzeichen, %C3%BC als ü


mf_2
2006-08-06, 17:23:36
Hallo,

Das Problem ist sicher für die meisten hier nicht schwer, abe rich hatte bis jetzt noch nie damit zu tun, daher scheitere ich daran. Ich habe eine Datei, die ich zeilenweise mit PHP einlese. So habe ich jede Zeile in einem String. Leider verwendet die Datei einen etwas konischen Zeichensatz. Da werden zB Leerzeichen mit %20 oder ü's mit %C3%BC umschrieben. Nun meine zwei Fragen:
1. Wie heisst dieser Zeichensatz?
2. Gibt es in PHP eine Funktion, mit der ich alle Zeichen dieser Art im String in lesbare Zeichen konvertieren kann?

Vielen Dank schonmal für eure Antworten!
mf_2

Gast
2006-08-06, 17:47:18
das ist eigentlich kein zeichensatz, sondern nur die kodierung bestimmter bytes - der tatsächlich verwendete zeichensatz ist dafür vollkommen egal. die kodierung wird vor allem benötigt, wenn du per GET besondere zeichen übergeben willst.
zum de/encoden gibt (raw)urlencode bzw. (raw)urldecode:
http://de2.php.net/manual/de/function.urldecode.php

mf_2
2006-08-06, 17:51:00
Ah danke! :)
Ich war schon am Verzweifeln, da weder html_entity_decode() noch htmlspecialchars_decode() den gewünschten Erfolg brachten.

EDIT:

Jetzt geht zwar das Leerzeichen, das ü wird aber als ü dargestellt. Wie konvertiere/decodiere ich das?

EDIT2:

Ich habe jetzt dieses Script gefunden, is zwar keine Funktionm, erfüllt aber denselben Zweck:


$ausgabe = str_replace ("ü", "ü", $ausgabe);
$ausgabe = str_replace ("Ãœ", "Ü", $ausgabe);
$ausgabe = str_replace ("ö", "ö", $ausgabe);
$ausgabe = str_replace ("Ö", "Ö", $ausgabe);
$ausgabe = str_replace ("ä", "ä", $ausgabe);
$ausgabe = str_replace ("Ä", "Ä", $ausgabe);
$ausgabe = str_replace ("ß", "ß", $ausgabe);

Gast
2006-08-06, 17:53:35
ergänzung:
dass ü zu %C3%BC wird (also zwei bytes) deutet darauf hin, dass hier utf-8 als zeichensatz verwendet wird.
da die utf-8 unterstützung von php recht bescheiden ist (strings werden nur als bytefolgen aufgefasst), kann es sein dass du je nach verwendungszweck entweder mbstring (http://de.php.net/manual/de/ref.mbstring.php) verwenden solltest, oder (falls es die verwendeten zeichen zulassen) das ganze mit utf8_decode (http://de.php.net/manual/de/function.utf8-decode.php) in iso-8859-1 konvertierst.

am notwendigen urldecode ändert das aber natürlich nichts, den musst du auf jeden fall als erstes auf deine strings loslassen.

Gast
2006-08-06, 17:54:14
EDIT:
Jetzt geht zwar das Leerzeichen, das ü wird aber als ü dargestellt. Wie konvertiere/decodiere ich das?
siehe ergänzung :)

mf_2
2006-08-06, 17:56:50
Cool, das hört sich noch besser an als mein EDIT2. Danke :biggrin:

Gast
2006-08-06, 17:57:36
und wenn wir gerade dabei sind:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) (http://www.joelonsoftware.com/articles/Unicode.html)
es lohnt sich wirklich, sich damit zu beschäftigen.

Gast
2006-08-07, 11:38:10
url_encode, url_decode, htmlentities?

HellHorse
2006-08-07, 15:46:50
und wenn wir gerade dabei sind:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) (http://www.joelonsoftware.com/articles/Unicode.html)
es lohnt sich wirklich, sich damit zu beschäftigen.
Characters vs. Bytes (http://www.tbray.org/ongoing/When/200x/2003/04/26/UTF) finde ich wesentlich besser.