[PHP] htmlspecialchars & htmlentities "emtpy" encoding-Bug in PHP 5.4.x

Dieses Thema im Forum "Webentwicklung" wurde erstellt von raid-rush, 23. Juni 2013 .

  1. 23. Juni 2013
    htmlspecialchars & htmlentities "emtpy" encoding-Bug in PHP 5.4.x

    PHP 5.4.4 bzw die ganze 5.4.x sind in den Funktionen für htmlspecialchars und htmlentities sowie htmlentities_decode nicht abwärtskompatibel zu php 5.2 oder 5.3 auch das setzen des mb_internal_encoding funktioniert bei diesen nicht (bei anderen schon, was auch der eigentliche Bug ist)

    Normal war ISO-8859-1 das default - dies wurde auf UTF-8 geändert - so passiert es, wenn andere unerwartete Codierungen eingefügt werden, dass die Funktionen einen leeren string zurückgeben. (Beispielweise führen Umlaute wie Ä Ö Ü zu diesem Fehler )

    Eine Möglichkeit das zu Fixen ist wenn ihr alle Funktionen durch überarbeitete nach altem Standard ersetzt:

    PHP:
    function  htmlXspecialchars ( $string $ent = ENT_COMPAT $charset = 'ISO-8859-1' ) {
    return 
    htmlspecialchars ( $string $ent $charset );
    }

    function 
    htmlXentities ( $string $ent = ENT_COMPAT $charset = 'ISO-8859-1' ) {
    return 
    htmlentities ( $string $ent $charset );
    }

    function 
    htmlX_entity_decode ( $string $ent = ENT_COMPAT $charset = 'ISO-8859-1' ) {
    return 
    html_entity_decode ( $string $ent $charset );
    }
    Den Code fügt ihr oberhalb ein (oder in die php.ini durch prepend_file= ) und ersetzt dann die Funktionen entsprechend durch diese.

    Der Bug ist auch hier gelistet: https://bugs.php.net/bug.php?id=61354
    Weitere Quelle: Fix htmlspecialchars() in PHP 5.4 for Latin1 (ISO-8859-1) (http://ufive.unibe.ch/?c=php54entitiesfix)
     
  2. 24. Juni 2013
    AW: htmlspecialchars & htmlentities "emtpy" encoding-Bug in PHP 5.4.x

    Wenn man doch eh alle Funktionsaufrufe ersetzen muss, dann kann mans doch auch gleich richtig hinschreiben, oder nicht?
     
  3. 27. Juni 2013
    AW: htmlspecialchars & htmlentities "emtpy" encoding-Bug in PHP 5.4.x

    Ja wenn man die stellen kennt und es überschaubar bleibt wäre das die saubere Lösung, allerdings ist das etwas aufwendig wenn man viele php-scripte hat, die alle nicht mehr funktionieren und kurzfristig funktionieren sollen.

    Die Ersetzung von htmlspecialchar nach htmlXspecialchar ist einfacher als mit einem komplexen regex den hinteren teil zu ersetzen sofern die Parameter nicht schon vorhanden sind.
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.