Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z preg_replace
Forum PHP.pl > Forum > Przedszkole
craker
Witam, mam pytanie co w tym kodzie jest źle:

Kod
$nazwa = preg_replace('#(l|L)eica#si', '<a href="http://www.sitesearch.html"><em>leica</em></a>', $nazwa);

ponieważ przy kilku takich wyrażeniach ani nie zamienia tych ciągów na odpowiedniki, a co gorsza, do bazy zapisywany jest pusty ciąg zamiast treści zamienionej
craker
to może mi powiesz czemu mi nie działa takie coś:
Kod
<?

require("includes/configure.php");

require("admin/includes/functions/database.php");


mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die("kupa");
mysql_select_db(DB_DATABASE)  or die("kupa1");

$q = "SELECT products_id, products_description, language_id FROM products_description WHERE language_id=4";

$query_result = mysql_query($q) or die("Zapytanie niepoprawne");


while($row = mysql_fetch_array($query_result))
{

    $id = $row['products_id'];
    $nazwa = tep_db_prepare_input($row['products_description']);

    $nazwa = preg_replace('#(t|T)achimetr(a|ów|y|u|ia)#si', '<a href="www.strona/tfearch.html"><em>\\1achimetr\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(s|S)tatyw(a|u|y|ów)#si', '<a href="www.strona/stfarch.html"><em>\\1tatyw\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(l|L)eica#si', '<a href="www.strona/leifrch.html"><em>leica</em></a>', $nazwa);
    $nazwa = preg_replace('#(d|D)ist(o|a)#si', '<a href="www.strona/disfch.html"><em>\\1ist\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(l|L)aser(y|a|u|ów|owa|owe)#si', '<a href="www.strona/lasfch.html"><em>\\1aser\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(r|R)adiotelefon(y|u|ów)#si', '<a href="www.strona/radfarch.html"><em>\\1adiotelefon\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(g|G)eodez(yjne|ja)#si', '<a href="www.strona/geodefarch.html"><em>\\1eodez\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(t|T)rimble#si', '<a href="www.strona/trifrch.html"><em>\\1rimble</em></a>', $nazwa);
    $nazwa = preg_replace('#(p|P)poziomic(a|e)#si', '<a href="www.strona/poziofrch.html"><em>\\1oziomic\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(ł|Ł)at(a|y)#si', '<a href="www.strona/łafarch.html"><em>\\1at\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(w|W)ęgielnic(a|e|y)#si', '<a href="www.strona/węgiefrch.html"><em>\\1ęgielnic\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(w|W)inkalk(a|u)#si', '<a href="www.strona/wifarch.html"><em>\\1inkalk\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(c|C)-geo', '<a href="www.strona/c-frch.html"><em>\\1-geo</em></a>', $nazwa);
    $nazwa = preg_replace('#(t|T)eodolit(a|u|ów|y)#si', '<a href="www.strona/teodofrch.html"><em>\\1eodolit\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(s|S)okkia#si', '<a href="www.strona/sfrch.html"><em>\\1okkia</em></a>', $nazwa);
    $nazwa = preg_replace('#(w|W)ykrywacz(e|a|u|ów|y)#si', '<a href="www.strona/wykryfarch.html"><em>\\1ykrywacz\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(l|L)okalizator#si', '<a href="www.strona/lokalizfearch.html"><em>\\1okalizator</em></a>', $nazwa);
    $nazwa = preg_replace('#(d|D)rogomierz(a|u|ów|e|y)#si', '<a href="www.strona/drogofarch.html"><em>\\1rogomierz\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(n|N)edo#si', '<a href="www.strona/nfrch.html"><em>\\1edo</em></a>', $nazwa);
    $nazwa = preg_replace('#(s|S)oppec#si', '<a href="www.strona/soppfrch.html"><em>\\1oppec</em></a>', $nazwa);
    $nazwa = preg_replace('#(r|R)ichter#si', '<a href="www.strona/richfrch.html"><em>\\1ichter</em></a>', $nazwa);
    $nazwa = preg_replace('#(r|R)adiodetection#si', '<a href="www.strona/radifrch.html"><em>\\1adiodetection</em></a>', $nazwa);
    $nazwa = preg_replace('#(d|D)alekomierz(a|u)e)#si', '<a href="www.strona/dalfarch.html"><em>\\1alekomierz\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(s|S)outh#si', '<a href="www.strona/soufrch.html"><em>\\1outh</em></a>', $nazwa);
    $nazwa = preg_replace('#(s|S)zkicownik(a|u|i|ów)#si', '<a href="www.strona/szkicfarch.html"><em>\\1zkicownik\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(g|G)ps#si', '<a href="www.strona/gf.html"><em>\\1ps</em></a>', $nazwa);
    $nazwa = preg_replace('#(r|R)uletk(a|i)#si', '<a href="www.strona/rufh.html"><em>\\1uletk\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(t|T)aśm(a|y)#si', '<a href="www.strona/tfrch.html"><em>\\1aśm\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(k|K)artografia#si', '<a href="www.strona/kartogfarch.html"><em>\\1artografia</em></a>', $nazwa);
    $nazwa = preg_replace('#(w|W)odowskaz(owa)#si', '<a href="www.strona/wodofrch.html"><em>\\1odowskaz\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(l|L)aserliner#si', '<a href="www.strona/lasefrch.html"><em>\\1aserliner</em></a>', $nazwa);
    $nazwa = preg_replace('#(m|M)iernik(a|ów|i)#si', '<a href="www.strona/mierfch.html"><em>\\1iernik\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(r|R)ektyfikacja#si', '<a href="www.strona/rektfarch.html"><em>\\1ektyfikacja</em></a>', $nazwa);
    $nazwa = preg_replace('#(p|P)rzegląd(y|ów)#si', '<a href="www.strona/przfch.html"><em>\\1rzegląd\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(s|S)erwis#si', '<a href="www.strona/sfarch.html"><em>\\1erwis</em></a>', $nazwa);
    $nazwa = preg_replace('#(b|B)udownictwo#si', '<a href="www.strona/budownfrch.html"><em>\\1udownictwo</em></a>', $nazwa);
    $nazwa = preg_replace('#(d|D)almierz(a|ów|e|y)#si', '<a href="www.strona/dalfrch.html"><em>\\1almierz\\2</em></a>', $nazwa);
    $nazwa = preg_replace('#(n|N)iwelator(a|u|y|ów)#si', '<a href="www.strona/niwfrch.html"><em>\\1iwelator\\2</em></a>', $nazwa);*/

    
    
    $nazwa = preg_replace("#<P><FONT (.*?)><STRONG>(.*?)</STRONG></FONT></P>#si", "<h2 class='prod_h2'>\\2</h2>", $nazwa);
    $nazwa = preg_replace("#<P><FONT (.*?)><b>(.*?)</b></FONT></P>#si", "<h2 class='prod_h2'>\\2</h2>", $nazwa);
    $nazwa = preg_replace("#<P><b><FONT (.*?)>(.*?)</FONT></b></P>#si", "<h2 class='prod_h2'>\\2</h2>", $nazwa);
    $nazwa = preg_replace("#<b>(.*?)</b>#si", "<strong>\\1</strong>", $nazwa);
    
    
    
    
    $tekst = mysql_escape_string($nazwa);
    $q1 = "UPDATE products_description SET `products_description`='$tekst' WHERE products_id=$id";


    
    
    if(mysql_query($q1)) echo $id ."<br />";
    echo mysql_error().'<br/>';
    
}        
?>


nie zamienia słów na odpowiedniki linkowe, i wywala wszystko z opisu w bazie
b_chmura
masz trzy literówki

tu
Kod
$nazwa = preg_replace('#(d|D)alekomierz(a|u)e)#si', '<a href="www.strona/dalfarch.html"><em>\\1alekomierz\\2</em></a>', $nazwa);

tu
Kod
$nazwa = preg_replace('#(c|C)-geo', '<a href="www.strona/c-frch.html"><em>\\1-geo</em></a>', $nazwa);

i tu
Kod
$nazwa = preg_replace('#(n|N)iwelator(a|u|y|ów)#si', '<a href="www.strona/niwfrch.html"><em>\\1iwelator\\2</em></a>', $nazwa);*/


a poza tym działa jak należy smile.gif

http://www.informel.pl/~bchmura/ble.php
craker
ok dzięki, działa z jednym wyjątkiem jak, a dokładniej chodzi mi np o:
Kod
$nazwa = preg_replace('#(t|T)achimetr(a|ów|y|u|ia)#si', '<a href="www.strona/tfearch.html"><em>\\1achimetr\\2</em></a>', $nazwa);

zamienia odmiany poprawnie jednak jak zrobić, by zamieniało także (t|T)achimetr, czyli bez końcówek, i drugie pytanie jak ograniczyć aby tylko raz zamieniał tzn mam takie coś że w/w słowo zamienia mi ze standardu, ale jak dojdą mi nowe pozycje to będę chciał powtórzyć działanie skryptu, czyli nie powinien zamieniać powtórnie tych słów. jak zrobić właśnie to by nie zamieniał ponownie bo wtedy się robi straszny bałagan, bo w linku jeśli znajdzie się też to słowo kluczowe to będzie link w linku i objęte jeszcze jednym linkiem
b_chmura
Cytat
zamienia odmiany poprawnie jednak jak zrobić, by zamieniało także (t|T)achimetr, czyli bez końcówek,

po nawiasie daj znak zapytania

Cytat
jak ograniczyć aby tylko raz zamieniał tzn mam takie coś że w/w słowo zamienia mi ze standardu, ale jak dojdą mi nowe pozycje to będę chciał powtórzyć działanie skryptu, czyli nie powinien zamieniać powtórnie tych słów. jak zrobić właśnie to by nie zamieniał ponownie bo wtedy się robi straszny bałagan, bo w linku jeśli znajdzie się też to słowo kluczowe to będzie link w linku i objęte jeszcze jednym linkiem


proponowałbym raz stosować tą funkcje przy wyświetlaniu. Ewentualnie w wyrażeniu zaznacz ze ciąg znaków nie może sie zaczynać "> i kończyć </a>
craker
za pierwsze dzięki, zapomniałem o znaku zapytania i dawałem + i się dziwiłem że nie było innego efektu

Cytat(b_chmura @ 26.10.2007, 13:01:59 ) *
proponowałbym raz stosować tą funkcje przy wyświetlaniu. Ewentualnie w wyrażeniu zaznacz ze ciąg znaków nie może sie zaczynać "> i kończyć </a>

tzn. możesz troszkę jaśniej questionmark.gif


b_chmura pomórz proszę bo to jest bardzo ważne dla mnie
b_chmura
w bazie przetrzymuj zwykły tekst dopiero przy wyświetlaniu formatuj go przed odpowiednią funkcje
W Twoim wypadku:
  1. <?php
  2. function zamien($nazwa)
  3. {
  4. $nazwa = preg_replace('#(t|T)achimetr(a|ów|y|u|ia)#si', '<a href="www.strona/tfearch.html"><em>1achimetr2</em></a>', $nazwa);
  5. $nazwa = preg_replace('#(s|S)tatyw(a|u|y|ów)#si', '<a href="www.strona/stfarch.html"><em>1tatyw2</em></a>', $nazwa);
  6. $nazwa = preg_replace('#(l|L)eica#si', '<a href="www.strona/leifrch.html"><em>leica</em></a>', $nazwa);
  7. $nazwa = preg_replace('#(d|D)ist(o|a)#si', '<a href="www.strona/disfch.html"><em>1ist2</em></a>', $nazwa);
  8. $nazwa = preg_replace('#(l|L)aser(y|a|u|ów|owa|owe)#si', '<a href="www.strona/lasfch.html"><em>1aser2</em></a>', $nazwa);
  9. $nazwa = preg_replace('#(r|R)adiotelefon(y|u|ów)#si', '<a href="www.strona/radfarch.html"><em>1adiotelefon2</em></a>', $nazwa);
  10. $nazwa = preg_replace('#(g|G)eodez(yjne|ja)#si', '<a href="www.strona/geodefarch.html"><em>1eodez2</em></a>', $nazwa);
  11. $nazwa = preg_replace('#(t|T)rimble#si', '<a href="www.strona/trifrch.html"><em>1rimble</em></a>', $nazwa);
  12. $nazwa = preg_replace('#(p|P)poziomic(a|e)#si', '<a href="www.strona/poziofrch.html"><em>1oziomic2</em></a>', $nazwa);
  13. $nazwa = preg_replace('#(ł|Ł)at(a|y)#si', '<a href="www.strona/łafarch.html"><em>1at2</em></a>', $nazwa);
  14. $nazwa = preg_replace('#(w|W)ęgielnic(a|e|y)#si', '<a href="www.strona/węgiefrch.html"><em>1ęgielnic2</em></a>', $nazwa);
  15. $nazwa = preg_replace('#(w|W)inkalk(a|u)#si', '<a href="www.strona/wifarch.html"><em>1inkalk2</em></a>', $nazwa);
  16. $nazwa = preg_replace('#(c|C)-geo', '<a href="www.strona/c-frch.html"><em>1-geo</em></a>', $nazwa);
  17. $nazwa = preg_replace('#(t|T)eodolit(a|u|ów|y)#si', '<a href="www.strona/teodofrch.html"><em>1eodolit2</em></a>', $nazwa);
  18. $nazwa = preg_replace('#(s|S)okkia#si', '<a href="www.strona/sfrch.html"><em>1okkia</em></a>', $nazwa);
  19. $nazwa = preg_replace('#(w|W)ykrywacz(e|a|u|ów|y)#si', '<a href="www.strona/wykryfarch.html"><em>1ykrywacz2</em></a>', $nazwa);
  20. $nazwa = preg_replace('#(l|L)okalizator#si', '<a href="www.strona/lokalizfearch.html"><em>1okalizator</em></a>', $nazwa);
  21. $nazwa = preg_replace('#(d|D)rogomierz(a|u|ów|e|y)#si', '<a href="www.strona/drogofarch.html"><em>1rogomierz2</em></a>', $nazwa);
  22. $nazwa = preg_replace('#(n|N)edo#si', '<a href="www.strona/nfrch.html"><em>1edo</em></a>', $nazwa);
  23. $nazwa = preg_replace('#(s|S)oppec#si', '<a href="www.strona/soppfrch.html"><em>1oppec</em></a>', $nazwa);
  24. $nazwa = preg_replace('#(r|R)ichter#si', '<a href="www.strona/richfrch.html"><em>1ichter</em></a>', $nazwa);
  25. $nazwa = preg_replace('#(r|R)adiodetection#si', '<a href="www.strona/radifrch.html"><em>1adiodetection</em></a>', $nazwa);
  26. $nazwa = preg_replace('#(d|D)alekomierz(a|u)e)#si', '<a href="www.strona/dalfarch.html"><em>1alekomierz2</em></a>', $nazwa);
  27. $nazwa = preg_replace('#(s|S)outh#si', '<a href="www.strona/soufrch.html"><em>1outh</em></a>', $nazwa);
  28. $nazwa = preg_replace('#(s|S)zkicownik(a|u|i|ów)#si', '<a href="www.strona/szkicfarch.html"><em>1zkicownik2</em></a>', $nazwa);
  29. $nazwa = preg_replace('#(g|G)ps#si', '<a href="www.strona/gf.html"><em>1ps</em></a>', $nazwa);
  30. $nazwa = preg_replace('#(r|R)uletk(a|i)#si', '<a href="www.strona/rufh.html"><em>1uletk2</em></a>', $nazwa);
  31. $nazwa = preg_replace('#(t|T)aśm(a|y)#si', '<a href="www.strona/tfrch.html"><em>1aśm2</em></a>', $nazwa);
  32. $nazwa = preg_replace('#(k|K)artografia#si', '<a href="www.strona/kartogfarch.html"><em>1artografia</em></a>', $nazwa);
  33. $nazwa = preg_replace('#(w|W)odowskaz(owa)#si', '<a href="www.strona/wodofrch.html"><em>1odowskaz2</em></a>', $nazwa);
  34. $nazwa = preg_replace('#(l|L)aserliner#si', '<a href="www.strona/lasefrch.html"><em>1aserliner</em></a>', $nazwa);
  35. $nazwa = preg_replace('#(m|M)iernik(a|ów|i)#si', '<a href="www.strona/mierfch.html"><em>1iernik2</em></a>', $nazwa);
  36. $nazwa = preg_replace('#(r|R)ektyfikacja#si', '<a href="www.strona/rektfarch.html"><em>1ektyfikacja</em></a>', $nazwa);
  37. $nazwa = preg_replace('#(p|P)rzegląd(y|ów)#si', '<a href="www.strona/przfch.html"><em>1rzegląd2</em></a>', $nazwa);
  38. $nazwa = preg_replace('#(s|S)erwis#si', '<a href="www.strona/sfarch.html"><em>1erwis</em></a>', $nazwa);
  39. $nazwa = preg_replace('#(b|B)udownictwo#si', '<a href="www.strona/budownfrch.html"><em>1udownictwo</em></a>', $nazwa);
  40. $nazwa = preg_replace('#(d|D)almierz(a|ów|e|y)#si', '<a href="www.strona/dalfrch.html"><em>1almierz2</em></a>', $nazwa);
  41. $nazwa = preg_replace('#(n|N)iwelator(a|u|y|ów)#si', '<a href="www.strona/niwfrch.html"><em>1iwelator2</em></a>', $nazwa);*/
  42.  
  43.  
  44.  
  45. $nazwa = preg_replace("#<P><FONT (.*?)><STRONG>(.*?)</STRONG></FONT></P>#si", "<h2 class='prod_h2'>2</h2>", $nazwa);
  46. $nazwa = preg_replace("#<P><FONT (.*?)><b>(.*?)</b></FONT></P>#si", "<h2 class='prod_h2'>2</h2>", $nazwa);
  47. $nazwa = preg_replace("#<P><b><FONT (.*?)>(.*?)</FONT></b></P>#si", "<h2 class='prod_h2'>2</h2>", $nazwa);
  48. $nazwa = preg_replace("#<b>(.*?)</b>#si", "<strong>1</strong>", $nazwa);
  49. return $nazwa;
  50. }
  51.  
  52. $tekst = "tekst wyciągnięty z jakiejś bazy (MySQL bądź ze zwykłego pliku)";
  53. echo zamien($tekst);
  54. ?>
craker
to wiem, ale mi chodzi, o wykonanie tego:

Cytat
Ewentualnie w wyrażeniu zaznacz ze ciąg znaków nie może sie zaczynać "> i kończyć </a>
b_chmura
Kod
'#[^><em>](t|T)achimetr(a|ów|y|u|ia)[^</em></a>]#si'


coś w ten deseń
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.