Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zamiana tekstu wszędzie poza linkami
Maxximilian
post 15.01.2010, 15:09:11
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 16.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
lmdl
post 16.01.2010, 22:52:44
Post #2





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.01.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Maxximilian
post 17.01.2010, 21:45:17
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 16.04.2005

Ostrzeżenie: (0%)
-----


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.  
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:02