Google jsmin.php und magic_quotes_runtime

»  Erstellt in Nützliches,Sonstiges by Holger Woltersdorf, Samstag, 26. Januar 2008

JavaScript CompressionWer die PHP-Klasse vom Google-Projekt JSMin, einer PHP-Portierung des von Douglas Crockford entwickelten JavaScript-Minimizers, benutzt, wurde veilleicht schon einmal mit der folgenden Fehlermeldung konfrontiert:

Uncaught Exception: Unterminated string literal. [0]
jsmin.php on line 94

Diese Fehlermeldung ist zurückzuführen auf die Überprüfung von Unix-Linefeeds (ord($str) == 10) im übergebenen JavaScript-Code. Diese wiederum werden verursacht durch zwei aufeinander folgende einfache Anführungszeichen. Nun sollte man sich die Frage stellen, woher kommen diese Anführungszeichen in einer JavaScript-Datei, die sonst wunderbar funktioniert? Das Problem ist die PHP-Einstellung “magic_quotes_runtime”. Ist diese eingeschaltet, so werden einige Passagen im JavaScript durch PHP automatisch quotiert.

Nun gibt es drei Möglichkeiten diesem Problem mit einer Lösung beizukommen:

  1. Einfach die Einstellung “magic_quotes_runtime” generell abschalten
    (in der php.ini oder per .htaccess im DOCUMENT_ROOT).
  2. Die Einstellung per .htaccess nur in dem Order, in dem die jsmin.php liegt abschalten.
    (php_value magic_quotes_runtime 0)
  3. Den Konstruktor der Klasse überschreiben, um einen Kompatibilitätsmodus zu erhalten, der es erlaubt die JSMin-Klasse zu verwenden, egal ob magic_quotes_runtime eingeschaltet ist, oder nicht. Wie man das macht, wird nachfolgend erklärt:

Überschreiben des Konstruktors von JSMin

<?
/**
 * Klasse, die von JSMin erbt
 */
class JSMinimizer extends JSMin
{
    /**
     * Überladener Konstruktor
     *
     * @param string $input Input (JavaScript-Code)
     */
    public function __construct( $input )
    {
        if ( get_magic_quotes_runtime() )
            $input = stripcslashes( $input );

        parent::__construct( $input );
    }
}
?>

Es empfiehlt sich an dieser Stelle eine neue Klasse anzulegen, die von der JSMin-Klasse erbt, da man sonst diesen Workaround in jeder neuen Version von JSMin wieder eintragen müsste. Wobei zu hoffen ist, dass die Entwickler von JSMin (PHP) den Workaround mit in die nächste Version ihrer Klasse aufnehmen. Informiert sind sie jedenfalls.

Weitere Verweise zu JSMin:


 
RSS-Feed - Alle Beiträge RSS-Feed - Kommentare

Januar 2008
M D M D F S S
« Nov   Feb »
 123456
78910111213
14151617181920
21222324252627
28293031