Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_replace() nie bierze wyrażenia
Forum PHP.pl > Forum > Przedszkole
Kloc
Witam. Dziś mam problem taki, że preg_replace nie może przerobić wyrażenia i nic nie wywala.

Robię tak i nie działa
  1. $string = preg_replace('#('.htmlspecialchars('<?php').')#i', htmlspecialchars_decode('<span style="color:red;">').htmlspecialchars('!\\1').htmlspecialchars_decode('</span>'), $string);


A to działa i chodzi mi o ten sam efekt
  1. $string = str_replace(htmlspecialchars('<?php'), htmlspecialchars_decode('<span style="color:red;">').htmlspecialchars('!<?php').htmlspecialchars_decode('</span>'), $string);


W pierwszym przykładzie błąd leży w zapisie- składni, a muszę użyć preg_replace bo tam sobie mogę uwzglądnić wielkość liter 'i' i nie muszę robić tego samego 2 razy w str_replace.
Robiłem to już na wszystkie sposoby jakie mi przychodzą do głowy i nic.
Yaneck
Pies jest pogrzebany tutaj" '<?php'. Z jakiegoś względu analiza składni pomija apostrof zamykający i cała reszta jest traktowana jak nie-kod. Jeżeli z napisu usunęlibyśmy znak "<" lub "?" - problem składni znika, chociaż sens wyrażenia jest dramatycznie zmieniony.

Kloc
Dokladnie, zakodowane "<?php" przez htmlspecial_chars() to nie to samo co zwykłe "<?php", a ja musze mieć tam właśnie to "inne", bo w stringu, w którym ma to zostać zmienione jest też "inne".
A jak do wyrażenia wstawię zwykłe "<?php"
to go nie zmieni, bo w stringu nie ma zwykłego "<?php".

htmlspecial_chars('<?php') !=== <?php

Jest jakis sposób na pominięcie tego np. jakąś flaga dla preg_replace() lub cos innego?
by_ikar
Twoje htmlspecialchars wypluwa coś takiego:

Kod
&lt;?php


Gdzie znak zapytania jest znakiem specjalnym. Lepiej powiedz co chcesz osiągnąć.
Kloc
Chce pololorować znaczek "<?php"/"<?PHP", który jest zakodowany przez htmlspecial_chars() na kolor czerwony smile.gif
by_ikar
  1. <?php
  2.  
  3. $str = '<?php
  4.  
  5. $var = "test";
  6.  
  7. //some comment
  8.  
  9. /** some function **/
  10. function foo()
  11. {
  12. return true;
  13. }';
  14.  
  15.  
  16. $callback = function($matches) {
  17. return '<span style="color:red;">'.$matches[0].'</span>';
  18. };
  19.  
  20. $res = preg_replace_callback('#&lt;\?php#i', $callback, htmlspecialchars($str));
  21.  
  22.  
  23. echo nl2br($res);


Heh oczywiście forum zmieniło

Kod
&lt;\?php


na

Kod
<\?php


Więc nie zapomnij tego poprawić u siebie. Dodatkowo polecam ci już zrobienie czegoś takiego w JS, co by nie potrzebnie męczyć serwer. Jest kilka fajnych już gotowych libów, z czego najbardziej przypadła do gustu mi ta: https://code.google.com/p/google-code-prettify/
Kloc
Użyje chyba bibloteki GeSHi i zostawię w niej tylko potrzebne mi języki.

qbnz.com/highlighter/
Turson
Zdecydowanie lepsze wyjście
Pyton_000
lub highlight_string
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.