Falls Dein Problem noch nicht gelöst sein sollte, hilft Dir vielleicht Folgendes
weiter... ;-)
PHP-Code:
<?php
function cToPhpArray($str)
{
// escapte Anführungszeichen kodieren
// [ >> ]
$str = strtr($str, array('=' => '=3D'));
$pattern = '#([^\\\]\\\(?:\\\{2})*)"#S';
$replace = '\\1=22';
for ($prev_str = ''; $prev_str !== $str; )
{
$prev_str = $str;
$str = preg_replace($pattern, $replace, $str);
}
// [ << ]
// Ersetzen der C-Array-Syntax durch die von PHP
// [ >> ]
$pattern = '^([^"]*((("[^"]*){2})*)?)\{([^"]*((("[^"]*){2})*)?)\}';
$replace = '\\1array(\\5)';
for ($prev_str = ''; $prev_str !== $str; )
{
$prev_str = $str;
$str = ereg_replace($pattern, $replace, $str);
}
// [ << ]
// escapte Anführungszeichen wieder dekodieren
$str = strtr($str, array('=22' => '"', '=3D' => '='));
return $str;
}
?>
Das Ersetzen habe ich hier mal die
ereg_replace()-Funktion übernehmen
lassen. Eigentlich sollte man, was reguläre Ausdrücke betrifft, komplett
auf die Perl kompatible Variante (PCRE) setzen, da die POSIX-Alternative
ereg_*() nicht so performant wie diese ist und daher in künftigen PHP-
Versionen (ab PHP 6) per Standard nicht verfügbar sein wird.
Da ich das Pattern gerade aber nicht vernünftig umgeschrieben bekomme
(unter PHP 4 ist meine PCRE-Lösung mehr als 100-fach, unter PHP 5 sogar
gut 1000-fach langsamer ^^), lass ich das
ereg_replace() da mal stehen... ;-)
Das entsprechende Perl kompatible Pattern sähe bei mir, wie folgt, aus:
PHP-Code:
<?php
$pattern = '#^([^"]*(?:(?:(?:[^"]*"[^"]*){2})*)?)\{' .
'([^"]*(?:(?:(?:[^"]*"[^"]*){2})*)?)\}#US';
$replace = '\\1array(\\2)';
?>