Ich musste heute feststellen, dass der im vorherigen Beitrag beschriebene Workaround nur die halbe Wahrheit ist. Dies hat zwei Gründe:
- Es ist nicht die magic_quotes_runtime Option allein, die den Input manipluliert.
- Die oben beschriebene Ableitung funktioniert nicht, da der Kontext des Objekts beim statischen Zugriff auf die minify()-Methode noch immer den Original-Konstruktor verwendet.
Wie man im PHP-Manual nachlesen kann, ergibt sich eine neue Situation für den Input, wenn neben magic_quotes_runtime auch die Option magic_quotes_sybase aktiviert ist. Dann werden die Quotations nicht durch Backslashes escaped sondern in weitere Single-Quotes eingebettet. D.h. es passiert folgendes:
$input = "Hier steht ein 'Text' und so"; Daraus wird dann bei nur magic_quotes_runtime aktiviert: $input = "Hier steht ein \'Text\' und so"; und bei aktivierten magic_quotes_runtime und magic_quotes_sybase: $input = "Hier steht ein ''Text'' und so"; (jeweils 2 Single-Quotations vor und nach dem Wort "Text")
Somit bringt die Lösung mit der Verwendung von stripcslashes() relativ wenig. Mit zwei weiteren Zeilen Code allerdings kann man auch dieses Problem lösen. Hier nun auch gleich die korrekte Ableitung der JSMin-Klasse:
<?
/**
* 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() && ini_get( 'magic_quotes_sybase' ) )
$input = str_replace( "''", "'", $input );
elseif ( get_magic_quotes_runtime() )
$input = stripcslashes( $input );
parent::__construct( $input );
}
/**
* Komprimiert JavaScript-Code
*
* @param string $input Input (JavaScript-Code)
* @return string Komprimierter Output
*/
public static function minify( $input )
{
$jsmin = new JSMinimizer( $input );
return $jsmin->min();
}
}
?>
Hier noch der Link zur entsprechenden Info auf php.net
http://de.php.net/manual/de/ref.info.php#ini.magic-quotes-runtime
Wer 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:


