Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana tekstu wszędzie poza linkami
Forum PHP.pl > Forum > PHP
Maxximilian
Jest taka funkcja w phpbb2, która zamienia brzydkie słowa na zamienniki

  1.  
  2. $message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1));


Nie są zamieniane słowa w obrębie adresu w linku, a są zamieniane w obębie anchora.

Jak to skorygować, że nie zmieniało również anchora - tylko wszystko co jest zwykłym tekstem poza linkami.
lmdl
Kiedyś korzystałem do tego z pewnej funkcji. Niestety miała ona odwrotne działanie - czyli podmieniała coś w określonych znacznikach. Jest jednak pewien sposób na nią. Najpierw funkcja:

  1. function replaceBetween($startString, $endString, $searchString, $replaceString, $data) {
  2. $i = 0;
  3.  
  4. do
  5. {
  6. $firstFound = strpos($data, $startString,$i);
  7. if( !empty($firstFound) ) {
  8. $secondFound = strpos($data, $endString,$firstFound+1);
  9.  
  10. $searchStringLenght = ($secondFound-$firstFound) + strlen($startString) + 1;
  11.  
  12. $k = $firstFound + strlen($startString);
  13. do
  14. {
  15. $pos = strpos($data, $searchString, $k );
  16. if( $pos < $secondFound && !empty($pos) ) {
  17. $data = substr_replace($data, $replaceString, $pos, strlen($searchString));
  18. }
  19. $k = $k+1;
  20. } while ( !empty($pos) );
  21.  
  22. } else $err = 1;
  23. $i = $firstFound + 1;
  24. }
  25. while( $err != 1 );
  26.  
  27. return $data;
  28. }


Sposób polega na tym aby na początku sprawdzanego tekstu dodać znacznik </a> a na końcu znacznik <a>. Następnie wywołać funkcję z parametrami:
  1. $dane = replaceBetween('</a>','<a>','brzydkie_slowo','ladne_slowo','-</a>'.$dane.'<a>')


Funkcja może nie jest doskonała ale działa prawidłowo.
Maxximilian
No więc rozwiazałem to w taki sposób:

  1. if ( count($orig_word) )
  2. {
  3. $test = $message;
  4. $test = preg_replace_callback ( "#<img(.*?)>#si" , simple_encode2 , $test );
  5.  
  6. //kodowanie linków przed każdą kolejną parą zmiennych
  7. $test = preg_replace_callback ( "#<a(.*?)/a>#si" , simple_encodex , $test );
  8.  
  9. $test = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $test . '<'), 1, -1));
  10.  
  11.  
  12. $test = preg_replace_callback ( "#<LINK>(.*?)</LINK>#si" , simple_decodex , $test );
  13. $test = preg_replace_callback ( "#<IMAGE>(.*?)</IMAGE>#si" , simple_decode2 , $test );
  14. $message = $test;
  15. }
  16.  
  17.  
  18. // teraz pytanie jak zamienić \$replacement_word na frazę html
  19.  
  20.  
  21. <a href="'. $replacement_word .'" title="Sprawdź link" style="border-bottom:dashed 1px royalblue; text-decoration: none">$orig_word</a>
  22.  
  23. // za cholerę nie umiem sobie poradzić z tymi nawiasami i slashami
  24.  
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.