Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja wewnątrz preg_replace
Forum PHP.pl > Forum > PHP
legorek
Czy ktoś mi może wytłumaczyć dlaczego nie mogę skorzystać z funkcją wewnątrze preg_replace. Mam taki kod:

  1. <?php
  2.  
  3. function bbcode($text)
  4. {
  5. function unhtmlentities($string)
  6. {
  7.  $trans_tbl = get_html_translation_table(HTML_ENTITIES);
  8.  $trans_tbl = array_flip($trans_tbl);
  9.  return strtr($string, $trans_tbl);
  10. }
  11. $ret = preg_replace(&#092;"/(.*?)/si\", '<b>1</b>', $text);
  12. $ret = preg_replace(&#092;"/(.*?)/si\", '<u>1</u>', $ret);
  13. $ret = preg_replace(&#092;"/(.*?)/si\", '<i>1</i>', $ret);
  14. $ret = preg_replace(&#092;"/
    1. (.*?)
    /si\", \"unhtmlentities('1')\", $ret);
  15. $this->tekst = $ret;
  16. return True;
  17. }
  18.  
  19. ?>

Niestety, ale
  1. <?php
  2.  
  3. $ret = preg_replace(&#092;"/
    1. (.*?)
    /si\", \"unhtmlentities('1')\", $ret);
  4.  
  5. ?>

nie chce działać. Zamiast zwracać wynik funkcji zwraca jej nazwę i warość zmiennej \\1. Zna ktos rozwiązanie?
Liko
Przepraszam, ale chyba coś Ci się pomyliło. Nie ma takiej funkcji jak unhtmlentities. Jest htmlentities" title="Zobacz w manualu PHP" target="_manual.
legorek
Jest, sam ją napisałem (czyt. skopiowałem z manuala;]), znajduje się w kodzie.
  1. <?php
  2.  
  3. function unhtmlentities($string)
  4. {
  5.  $trans_tbl = get_html_translation_table(HTML_ENTITIES);
  6.  $trans_tbl = array_flip($trans_tbl);
  7.  return strtr($string, $trans_tbl);
  8. }
  9.  
  10. ?>
bendi
Modyfikator e dziala jak funkcja eval, wiec poprawna regulka powinna wygladac tak:
  1. <?php
  2.  
  3. $ret = preg_replace(&#092;"/
    1. (.*?)
    /sei\", \"unhtmlentities('1')\", $ret);
  4.  
  5. ?>
legorek
Dzięki wielkie, tego właśnie szukałem :-)
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.