PHP-Entwicklung

PHP-Entwicklung

Posts 1-10 of 16
  • Björn Schorre
    Björn Schorre
    The company name is only visible to registered members.
    Umwandlung deutscher Sonderzeichen
    Hallo,

    ich habe Daten aus einer mySQL-Tabelle (Kollation: utf8_general_ci) und dort kommen die deutschen Sonderzeichen (ä, ü, ö, ß) vor. Jetzt möchte ich diese umwandeln, aber der Aufruf
    $filename = str_replace( 'ä', 'ae', $filename);
    macht nicht dass was ich will.
    Dateiname vorher: Löhne.pdf
    Dateiname nachher: Löhne.pdf

    Woran liegt das? Hat es etwas mit der Kollation der DB zu tun?
    Mache ich ein echo $filename; ist alles i.O.


    Gruß
    Björn Schorre
  • R. JOCHIM
    R. JOCHIM
    The company name is only visible to registered members.
    Re: Umwandlung deutscher Sonderzeichen
    Moin moin,

    Funktioniert das hier ?
    $filename = str_replace( 'ä', 'ae', utf8_decode($filename) );

    Gruß

    Nachtrag: Da wird wahrscheinlich Unicode in einer Nicht-Unicode-Umgebung verarbeitet. Die gründlichere Lösung wäre PHP standardmäßig für Unicode zu konfigurieren und das Skript in Unicode zu speichern.
    R.
    This post was modified on 12 Dec 2011 at 09:40 am.
  • Björn Schorre
    Björn Schorre
    The company name is only visible to registered members.
    Re^2: Umwandlung deutscher Sonderzeichen
    Hallo,

    danke für den Tipp. Ich werds heute Abend ausprobieren.
    Auf meine Entwicklungsumgebung habe ich vollen Zugriff, aber kann die Umstellung auf Unicode auch bei unserem Webhoster durch mich gemacht werden?


    Gruß
    Björn Schorre
  • Steven Weingärtner
    Steven Weingärtner
    The company name is only visible to registered members.
    Re^3: Umwandlung deutscher Sonderzeichen
    Das konkrete Problem dürfte hier wirklich bei der Entwicklungsumgebung liegen.

    Ihre PHP-Datei wurde von Ihrer IDE vermutlich als iso-8859-1 abgespeichert, das bedeutet im Code str_replace("ä", "ae" ...) wurde auch das von ihnen fest einkodierte "ä" als iso-8859-1 abgespeichert. In diesem Fall wird das iso-8859-1 "ä" dann mit dem UTF-8 "ä" aus der Datenbank vergleichen -> keine Übereinstimmung, also wird es nicht durch "ae" ersetzt.

    Wenn Sie die PHP-Datei als utf-8 abspeichern müsste sich das Problem von selbst erledigen.

    Ein kleiner Tipp, bei Eclipse (und allen darauf basierenden IDEs) können Sie die Standard-Kodierung unter "Window / Preferences / General / Workspace" ändern. Sie können das auch auf Projekt-Basis machen.

    Beachten Sie aber, dass bei der Änderung der Kodierung einer Datei alle Umlaute in der Datei (z.B. in Kommentaren) unleserlich werden.
  • User photo
    Eugen Rieck
    The company name is only visible to registered members.
    Re^4: Umwandlung deutscher Sonderzeichen
    Die portabelste Alternative ist aus meiner Sicht

    $filename = str_replace("\xC3\xA4", 'ae', $filename);

    - $filename ist garantiert UTF8 (aus dem Kontext des OP)
    - Der Zeichensatz des Scripts sollte keinen Einfluss seine Funktion haben, sonst können bei Providerwechsel etc böse Dinge (TM) passieren.
  • Post visible to registered members
  • Frank Pöhler
    Frank Pöhler    Premium Member
    The company name is only visible to registered members.
    Re: Umwandlung deutscher Sonderzeichen
    Hallo,

    bitte nicht Collation mit Charset gleichsetzen.

    Die Collation gibt bei MySQL die Sortierreihenfolge an, wobei per Default auch das passende Charset gewaehlt wird. Dies ist aber nicht zwingend vorgegeben.

    Weiterhin gibt es bei MySQL 4 Stellen, an denen Einfluss auf Charset und Collation genommen werden kann, was bei abweichenden Konfigurationen schnell zu Problemen mit dem Encoding fuehrt:

    - Server (server- und clientseitig konfigurierbar)
    - Database
    - Table
    - Column

    Die MySQL Dokumentation enthaelt alle noetigen Informationen zu den einzelnen Faellen.

    Viele Grüße,
    Frank
    This post was modified on 14 Dec 2011 at 08:54 am.
  • Björn Schorre
    Björn Schorre
    The company name is only visible to registered members.
    Re^5: Umwandlung deutscher Sonderzeichen
    Hi,

    Danke erst einmal für die vielen Antworten. Ich werds morgen testen können.

    @Eugen Rieck:
    was bedeutet OP und TM ?

    @Nikolaj Giebelhaus:
    Natürlich haben Sie Recht. Aber ich habe die str_replace Funktuion dreimal hintereinander jeweils auf ä, ö, ü.


    Gruß
    Björn Schorre
    This post was modified on 15 Dec 2011 at 08:00 am.
  • Post visible to registered members
  • Guido Faust
    Guido Faust    Premium Member
    The company name is only visible to registered members.
    Re^6: Umwandlung deutscher Sonderzeichen
    An Stelle des dreifachen Aufrufs von str_replace können Sie auch Arrays mit den zu findenden und zu ersetzenden Zeichen verwenden.

    Alternativ könnte man (je nach Kontext) auch iconv() mit der //TRANSLIT Option verwenden, hier werden dann auch noch eine Vielzahl anderer Zeichen umgewandelt.