| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

05-06-2009, 12:30
|
|
ppadde
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 3
|
|
UTF8 String in einem ISO Script, € Zeichen
Leidiges Thema:
Ich habe ein Script das selbst in Latin 9 codiert ist. Dieses Script lädt einen UTF8 String in dem Euro Zeichen drin sind. utf8_decode wandelt ja nur in Latin 1 um und kennt daher keine Eurozeichen. Kann ich nun vor dem utf8_decode irgendwie die Eurozeichen durch etwas anderes ersetzen, zum Beispiel __E__, dann könnte ich diesen String nach dem decode wieder durch das Eurozeichen ersetzen.
Müsste vermutlich irgendwie auf die hexadezimalen Werte des UTF8 Strings matchen. Hat jemand ne Idee wie?
Zur Lösung: Ich werde das Script nicht in UTF8 abspeichern, und ich möchte auch nichts anderes als utf8_decode verwenden.
Vielen Dank schonmal im Vorraus.
Geändert von ppadde (05-06-2009 um 13:28 Uhr)
|

05-06-2009, 12:37
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Verwende iconv() statt utf8_decode().
|

05-06-2009, 13:32
|
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
Um Kompatibilitätsprobleme zu vermeiden solltest du, wenn möglich (was eigentlich immer der Fall ist), auch keine Zeichen in deinem Script benutzen, die mehr als 7 bit benötigen. Dafür gibts ja z.B. HTML-Entities.
|

05-06-2009, 13:46
|
|
Wyveres
Registrierter Benutzer
|
|
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
|
|
Zitat:
Zitat von ppadde
Ich werde das Script nicht in UTF8 abspeichern, und ich möchte auch nichts anderes als utf8_decode verwenden.
|
PHP: utf8_decode - Manual
Lies die User Kommentare.
ansonsten. nimm iconv() wie h3ll schon sagte.
|

06-06-2009, 19:01
|
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.746
|
|
Ich habe den Thread getrennt, da die Herren h3ll, jmc und combie ziemlich OT sind, also Leute hier geht es weite mit euren Diskussion UTF8 im PHP-Script
|

07-06-2009, 22:02
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von ppadde
Leidiges Thema:
Ich habe ein Script das selbst in Latin 9 codiert ist. Dieses Script lädt einen UTF8 String in dem Euro Zeichen drin sind. utf8_decode wandelt ja nur in Latin 1 um und kennt daher keine Eurozeichen. Kann ich nun vor dem utf8_decode irgendwie die Eurozeichen durch etwas anderes ersetzen, zum Beispiel __E__, dann könnte ich diesen String nach dem decode wieder durch das Eurozeichen ersetzen.
Müsste vermutlich irgendwie auf die hexadezimalen Werte des UTF8 Strings matchen. Hat jemand ne Idee wie?
Zur Lösung: Ich werde das Script nicht in UTF8 abspeichern, und ich möchte auch nichts anderes als utf8_decode verwenden.
|
In welcher Kodierung dein PHP-Script verfasst wurde, hat dabei (fast) nichts zu sagen.
PHP-Code:
// Euro-Zeichen maskieren
// \xe2\x82\xac ist UTF-8 von Unicode Codepoint U+20ac
$masked_utf = strtr($utf, array ("\xe2\x82\xac" => '__EUR__'));
$masked_iso = utf8_decode($masked_utf);
// Euros wieder einfügen
// \xa4 ist ISO-8859-15 und ISO-8859-16
// \x80 ist Windoze-Codepage 1252
$iso = strtr($masked_iso, array ('__EUR__' => "\xa4"));
Einfacher wäre es, statt __EUR__ gleich den ISO-Währungscode EUR oder die Named-Entity € einzusetzen, dann könntest du dir das mehrmalige Umkodieren ersparen. Das 3-Buchstaben-Kürzel bleibt im ASCII-Bereich, und ein Unicode-fähiger moderner Browser sollte kein Problem haben, für € das Euro-Zeichen darzustellen.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (08-06-2009 um 11:41 Uhr)
|

10-06-2009, 16:50
|
|
ppadde
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 3
|
|
Die Lösung von Fireweasel sieht genau danach aus was ich gesucht habe.
Vielen Dank
|

11-06-2009, 17:47
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Wenn du nicht an die Ursachen willst.....
Zitat:
|
und ein Unicode-fähiger moderner Browser sollte kein Problem haben, für € das Euro-Zeichen darzustellen.
|
Klar, Browser....
Aber was ist mit Textmails, Ausgabe als Image oder PDF.
Also wieder ein dirty Hack, weil die einfachsten Zeichensatz Grundlagen nicht verstanden wurden oder gar absichtlich nicht beachtet werden.
|

11-06-2009, 20:05
|
|
ppadde
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 3
|
|
Zitat:
Zitat von combie
Also wieder ein dirty Hack, weil die einfachsten Zeichensatz Grundlagen nicht verstanden wurden oder gar absichtlich nicht beachtet werden.
|
Oder weil weitere nachfolgend verarbeitende Programme es nicht erlauben ander als mit so einem Hack zu einem passenden Ergebnis zu kommen? Nicht immer ist alles von einer Person anpassbar...
|

12-06-2009, 16:32
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von combie
Wenn du nicht an die Ursachen willst.....
Klar, Browser....
|
Das galt selbstverständlich unter der (impliziten) Annahme, dass die Ausgaben des Scriptes am Ende in einem HTML-fähigen HTTP-Client landen. Bei PHP-Scripts dürfte das überdurchschnittlich häufig der Fall sein.
Zitat:
|
Aber was ist mit Textmails, Ausgabe als Image oder PDF.
|
Hängt davon ab, womit das Ganze weiterverarbeitet wird. Die PHP-Image-Funktionen (libgd) wie imagettftext() können mit "numeric coded resources" umgehen. Also könnte man da statt '€' eben '& #8364;'[1] verwenden. Die Fähigkeiten der PDF-Funktionen kenne ich nicht. Und für Text-Mails (oder generell für ASCII/ISO-Latin-1-Zeichensätze) wäre immer noch das von mir vorgeschlagene 'EUR' machbar.
Zitat:
|
Also wieder ein dirty Hack, weil die einfachsten Zeichensatz Grundlagen nicht verstanden wurden oder gar absichtlich nicht beachtet werden.
|
Der größte Teil der Software, die du verwendest (wie zum Beispiel dieses Board ;-) hier), basiert auf irgendwelchen (mal mehr mal weniger schmutzigen) Hacks, selbst so geniale Erfindungen wie UTF-8.
Wenn es sich nur um das Euro-Symbol handelt, halte ich das aber für (gerade noch) vertretbar.
[1] Schön, dass auch diese Board-Version eine kaputte Eingabevalidierung hat. Ich hatte eigentlich '&' und '#8364;' getippt. Herausgekommen ist ein schönes Euro-Symbol: '€'. Mal kucken ob das auch mit Hex-Werten geht: '€' ... nein, scheinbar nicht.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (12-06-2009 um 16:43 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|