parseSimpleTokens führt zu Fehler bei Vergleichswerten mit Leerzeichen #5323

Closed
thkuhn opened this Issue Feb 1, 2013 · 2 comments

2 participants

@thkuhn

Am Beispiel:

$arrData = array(
  'developer' => 'Leo Feyer', 
  'cms' => 'Contao Open Source WCMS');

$strBuffer = 'What\'s your favorite CMS?
{if cms=="Contao Open Source WCMS"}
##cms##, developed by ##developer##
{else}
nen anderes
{endif}';

$strBuffer = $this->parseSimpleTokens($strBuffer, $arrData);

Die Methode parseSimpleTokens() erzeugt daraus den zu eval'enden String:

What\'s your favorite CMS?
<?php if ($arrData[\'cms\'] == "Contao): ?>
<?php echo $arrData[\'cms\']; ?>, developed by <?php echo $arrData[\'developer\']; ?>
<?php else: ?>
nen anderes
<?php endif; ?>

Es müssten wohl die Patterns geänder werden, statt:

$strReturn .= preg_replace('/\{if ([A-Za-z0-9_]+)([=!<>]+)([^;$\(\)\[\] ]+).*\}/i', '<?php if ($arrData[\'$1\'] $2 $3): ?>', $strTag);

entweder:

$strReturn .= preg_replace('/\{if ([A-Za-z0-9_]+)([=!<>]+)([^;$\(\)\[\] ]+)(.*)\}/i', '<?php if ($arrData[\'$1\'] $2 $3$4): ?>', $strTag);

oder:

$strReturn .= preg_replace('/\{if ([A-Za-z0-9_]+)([=!<>]+)([^;$\(\)\[\]]+).*\}/i', '<?php if ($arrData[\'$1\'] $2 $3): ?>', $strTag);
@leofeyer
Contao member

Bei mir funktioniert es mit folgendem Ausdruck:

preg_replace('/\{if ([A-Za-z0-9_]+)([=!<>]+)([^;$\(\)\[\]\}]+).*\}/i', '<?php if ($arrData[\'$1\'] $2 $3): ?>', $strTag)

Kannst Du den Code bitte kurz testen und mir Feedback geben (auch wenn das Ticket schon geschlossen ist)?

@leofeyer leofeyer closed this Feb 4, 2013
@thkuhn

Aber klar, funktioniert ebenfalls, Danke.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment