Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in
Forum PHP.pl > Forum > PHP
lolo121
hejka. otoz zainstalowalem xampp i zainstalowalem swój autorski skrypt forum. porzuciłem projekt juz dobry czas temu i teraz postanowilem go wznosic. wiedza na ten temat juz spadla. po instalacji forum w wyswietleniu posta pokazuje mi sie nad nim



z tego rozumiem, ze funkcja preg_replace() jest przestarzala i trzeba ją zastapic funkcją preg_replace_callback. po zastąpieniu jednak występują kolejne błędy. o to fragment kodu powodujący błędy (wrzuciłbym cały plik, ale za długi post...)

Cytat
// Preappend http:// to url address if not present
$s = preg_replace('/\[url\=([^(http)].+?)\](.*?)\[\/url\]/i', '$2', $s);
$s = preg_replace('/\[url\]([^(http)].+?)\[\/url\]/i', '$1', $s);

// Add line breaks
$s = nl2br($s);

// Remove the trash made by previous
$s = preg_replace(self::$lineBreaks_search, self::$lineBreaks_replace, $s);

// Parse bbcode
$s = preg_replace(self::$simple_search, self::$simple_replace, $s);

// Parse [list] tags
$s = preg_replace('/\[list\](.*?)\[\/list\]/sie', '"<ul>\n".self::process_list_items("$1")."\n</ul>"', $s);
$s = preg_replace('/\[list\=(disc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman|lower-greek|lower-alpha|lower-latin|upper-alpha|upper-latin|hebrew|armenian|georgian|cjk-ideographic|hiragana|katakana|hiragana-iroha|katakana-iroha|none)\](.*?)\[\/list\]/sie',
'"<ol style=\"list-style-type: $1;\">\n".self::process_list_items("$2")."\n</ol>"', $s);


proszę o pomoc a najlepiej o przerobienie tej funkcji, by dzialala bez problemów. dodam tylko, że pod starszą wersją php wszystko działa ok, czyli ta najnowsza musiała to spowodować.

później popatrzę za innym systemem parsowania jednak na razie niech zostanie ten bbcode. muszę sobie wszystko przypomnieć wink.gif
jackraymund
W callback niema niczego nadzwyczajnego. Natomiast to formatowanie jest troszkę dziwne. I ciężko mi określić co to ma dokładnie zrobić.
  1. // Preappend http:// to url address if not present
  2. $s = preg_replace('/\[url\=([^(http)].+?)\](.*?)\[\/url\]/i', '$2', $s);
  3. $s = preg_replace('/\[url\]([^(http)].+?)\[\/url\]/i', '$1', $s);

Z komentarza wynika że ma dodać http do linku...
Natomiast zamiast linku zostawia opis linku, a link wywala.
Osobiście tą linijkę bym zamienił na
  1. $s = 'jotpe';
  2. echo '<pre>';
  3. '/\[url\=([^(http)].+?)?\](.*?)\[\/url\]/i',
  4. function ($matches) {
  5. if(is_array($matches)) return "}]{$matches[2]}";
  6. },
  7. $s
  8. );

Chodź możliwe ze chodzi o coś innego.
lolo121
Wrzucę cały kod

http://wklej.to/Ybi2A

Skrypt służy do parsowania BBCode jak [ b] [ /b], [ i] [ /i] itp. Nie jest to moje brałem to z internetu


Przez te błędy deprecated przestały działać pogrubienia pochylenia i inne

@odświeżam

Post wyżej wrzuciłem cały kod tego pliku
sazian
wywal "e" przełączników wyrażenia
'/\[img (.*?)\](.*?)\[\/img\]/ise',
lolo121
Cytat(sazian @ 22.12.2014, 21:24:20 ) *
wywal "e" przełączników wyrażenia
'/\[img (.*?)\](.*?)\[\/img\]/ise',


Jest postęp - teraz wyświetlają się cztery błędy o treści jak w temacie z linijkach 203, 203, 209, 211
sazian
wywal wszystkie "e"

'/\[code\](.+?)\[\/code\]/sie',
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.