Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja eval() i szablony
Forum PHP.pl > Forum > PHP
kawuha
Używam funkcji eval() do wyszukiwania subsekcji w szablonie:
  1. <?php
  2. $uncompiled = &#092;"{section name=news loop=2}<b>{txt[news]}</b>{/section}\";
  3.  
  4. $news = array(&#092;"news1\", \"news2\");
  5. $vars = array(
  6.   &#092;"txt\" => $news
  7.   );
  8. $sub_uncompiled = array(
  9.   &#092;"#{section name=(.*?) loop=(.*?)}#si\",
  10.   &#092;"#{(*.?)[(.*?)]}#si\",
  11.   &#092;"#{/section}#si\"
  12.   );
  13. $model[1] = addslashes(&#092;"<? for($i=0; $i<=2; $i++) { echo '\");
  14. $model[2] = addslashes(&#092;"'.$vars[1][$i].'\");
  15. $model[3] = addslashes(&#092;"'; } ?>\");
  16.  
  17.  
  18.  
  19. $sub_compiled = preg_replace($sub_uncompiled, $model, $uncompiled);
  20.  
  21. eval(\"?>\".$sub_compiled.\"<?&#092;");
  22. ?>

Według mnie jest wszytko ok, ale wywala mi następujący błąd:
Cytat
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\usr\krasnal\www\kawuha\tpl\wyr.php on line 14

Co tu jest nie tak? Proszę o pomoc.
dr_bonzo
14: $vars[\\1][$i]
tu chcesz sie odwolac do elementu tablicy?
zrob to tak
"...{$vars[$i]}...", nie wiem co daje [\\1]questionmark.gif?
kawuha
Cytat(dr_bonzo @ 2005-02-23 20:00:08)
14: $vars[\\1][$i]
tu chcesz sie odwolac do elementu tablicy?
zrob to tak
"...{$vars[$i]}...", nie wiem co daje [\\1]questionmark.gif?

przecież
  1. <?php
  2. '.$vars[1][$i].'
  3. ?>

ma zastąpić
  1. <?php
  2.  #{(*.?)[(.*?)]}#si
  3. ?>

a \\1 odpowiada pierwszemu (.*?). Dzięki temu po eval'u powinno wyglądać:
  1. <? for($i=0; $i<=2; $i++) 
  2. { 
  3. echo '<b>'.$vars[txt][$i].'</b>'; 
  4. } 
  5. ?>
Fipaj
\\1 - odwołania wsteczne: możemy przez nie odwoływać się do sekcji wyrażeń regularnych (czyli nawiasów).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.