Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Default charset für Funktionen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Default charset für Funktionen

    Ich habe meine PHP Seite und mysql Datenbank auf Grund von Komplikationen komplett auf UTF-8 eingestellt. Nun bin ich auf das Problem gestoßen, obwohl PHP bsw. einen Umlaut aus der mysql Datenbank holen kann und im html dokument ohne neu codierung richtig darstellen kann, arbeiten funktionen wie htmlentities oder html_entity_decode immer noch standart mässig mit den charset: ISO-8859-1.
    Sobald ich jedoch den optimalen Parameter eingebe wie hier:
    $variable = html_entity_decode($variable, ENT_QUOTES, 'UTF-8');
    funktioniert alles wunderbar.
    Da meine Seite sehr groß und umfangreich ist und die optionalen parameter nicht gesetzt sind, möchte ich jedoch ungern alle funktionen umschreiben. Ausserdem scheint mir diese Lösung wenig elegant.

    Also möchte ich probieren PHP so einzurichten das es als standardmässiges Charset für funktionen immer UTF-8 benutzt.

    Die wichtige Zeilen aus meiner php.ini:
    default_charset = "UTF-8"

    Ich weiß einfach nicht weiter und google konnte mir nicht helfen von daher bin ich für jede Hilfe dankbar!

  • #2
    Dann überprüfe mal ob dein Webserver ein charset mitschickt, z.b. mit wget (Paramater -dv) oder einem anderen Tool das dir die Header die dein Server sendet anzeigt.
    [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
    | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

    Kommentar


    • #3
      zitat aus dem aktuellen php-handbuch:

      Wie bei htmlspecialchars() steht das optionale dritte Argument charset zur Verfügung, das den für die Konvertierung benötigten Zeichensatz definiert. Gegenwärtig wird standardmäßig der ISO-8859-1 Zeichensatz verwendet.
      damit wirst du wohl nicht umhin kommen, deinen quellcode zu renovieren.

      cx

      Kommentar


      • #4
        Ich danke euch für eure Antworten. Was den wget vorschlag angeht so bin ich mir sicher das mein webserver UTF-8 versendet. Ich glaube cortex hat recht was die Sache angeht. Ich habe noch mal probiert den PHP Programm Quelltext umzuschreiben und neu zu compilieren so das die Funktionen standard mässig UTF-8 benutzen, aber auch das blieb ohne erfolg. Ist wohl auch keine besonders ISO konforme Lösung wenn es dann nur bei mir richtig laufen würde.

        Kommentar


        • #5
          Hast du das Problem inzwischen lösen können. Ich stehe vor einem ähnlichen Problem. Auch ich würde gerne komplett auf UTF-8 schalten, also APACHE+PHP+DB/MySQL, damit es beim internationalen Umgang diverser Charsets keine Probleme mehr gibt.

          Aus der PHP-Logik heraus, müsste er ja bei jeder Funktion, die auf den Charset zurückgreift automatisch prüfen, wie der default_charset in der PHP.INI lautet und diesen dann auch standardmäßig verwenden. Hmmm... ich hab' das jetzt nicht geprüft, aber falls dem noch nicht so ist, welche Funktionen arbeitet dann alle gegen diese Logik?

          In diesen Posts wurden bereits erwähnt:
          - htmlspecialchars()
          - htmlentities()
          - html_entity_decode()

          ... die alle im dritten Argument den Charset: 'UTF-8' akzeptieren. Aber gibt es noch weitere Funktionen, auf die man achten muss, da sie nicht standardmäßig auf den default_charset achten?

          Kommentar


          • #6
            Zitat von Froschkoenig84 Beitrag anzeigen

            Aus der PHP-Logik heraus, müsste er ja bei jeder Funktion, die auf den Charset zurückgreift automatisch prüfen, wie der default_charset in der PHP.INI lautet und diesen dann auch standardmäßig verwenden. ...
            Häh? PHP verwendet intern keine bestimmte Kodierung. Es wird einfach alles als Binärstring verstanden. Wenn man jetzt bspw. einen in UTF-8-kodierten String aus einer Datenbank holt und den per echo() ausgibt, ändert PHP rein gar nichts an den Daten.

            Dem Webbrowser dabei zu helfen, die Ausgaben auch als UTF-8 zu verstehen, ist deine Aufgabe: Sorge dafür, dass der entsprechende HTTP-Header gesendet wird und die XHTML|HTML-Datei die entsprechenden Meta-Informationen im Header-Teil eingebaut hat.

            Hmmm... ich hab' das jetzt nicht geprüft, aber falls dem noch nicht so ist, welche Funktionen arbeitet dann alle gegen diese Logik?

            In diesen Posts wurden bereits erwähnt:
            - htmlspecialchars()
            Htmlspecialchars() verändert nur Zeichen im ASCII-Range. Also kannst du bei UTF-8 den Encoding-Parameter auch weglassen. Möglicherweise ist das bei UCS2- oder UCS4-kodierten Web-Seiten anders. Aber wer versendet schon solche?

            Htmlentities() und html_entity_decode() sind auf einer Website ohne erkennbaren Nutzen für mich, daher kann ich nicht sagen, ob ein charset-Parameter da einen Sinn ergibt.

            Anders sieht es bei den String-Bearbeitungsfunktionen (speziell Vergleichsfunktionen) aus. Da gibt es einige, die tatsächlich "locale"-abhängig sind. Von denen würde ich die Finger lassen, weil niemand weiß, ob die auf zwei verschiedenen Servern zu einem gleichen Verhalten überredbar sind (von ASCII abgesehen). Um Unicode-Strings zu bearbeiten oder zu vergleichen, hat PHP ein Sammelsurium von im Laufe der Zeit zusammengestoppelten Funktionsbibliotheken wie iconv, mbstring, pcre (nur UTF-8 ) und intl zur Verfügung. Die Text-Ausgabefunktionen für OTF/TTF/Type1 der LibGD verstehen ebenfalls UTF-8.
            Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

            Kommentar


            • #7
              http://www.w3.org/International/ques...charset.de.php
              http://www.askapache.com/htaccess/se...-htaccess.html

              Bedenke auch, falls du Meta-Notierungen oder XML-Encoding Notierungen im Veröffentlichten Quellcode deiner Webs hast, das diese auch verändert werden sollten.
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar

              Lädt...
              X