Mam w słowniku kilkaset wpisów i przykładowo znajduje sie tam wyraz dom, chce żeby zamieniało w zdaniu tylko całe wyrazy nie może zamienić część znaków na link np. w wyrazach domek, domowy, domofon, domino itd. Ma zamieniać również wyrazy bez względu na wielkość znaków.
Skrypt działa tak pobieram słowa z bazy i lecę pętlą - tu problemu nie ma
następnie tworze linka na podstawie tytułu i opis - tu tez ok.
Problem natomiast jest przy zamianie funkcją str_ireplace() problemu by nie było gdyby każdy wyraz otaczały spacje ale tam znajdują sie przecinki kropki nawiasy kod html i inne znaki.
Próbowałem to zrobić za pomocą preg_replace() oraz [^[:alnum:]] i wszystko jest ok gdy w wyrażeniu znajduje sie text statyczny, gorzej ze musi tam sie znaleźć również zmienna a wtedy wywala mi błędy. nie wiem jak sobie z tym poradzić, wiec na razie stosuje kilka wywołań str_ireplace() ale to chyba dobry pomysł nie jest ze względu na wydajność a i tak parę kombinacji znaków sobie darowałem
Oto mój kod:
<?php foreach ($slownik as $rec) { $rec['Desc'] = str_ireplace($rec['Title'], '', $rec['Desc']); $a = '<a href="slownik#,#' . substr($rec['Id'], 0, 1) . '#,#' . $rec['Id'] . '#.#html" title="' . $rec['Desc'] . '">' . $rec['Title'] . '</a>'; $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].' ', ' '.$a.' ', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].'.', ' '.$a.'.', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].',', ' '.$a.',', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].'?', ' '.$a.'?', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].')', ' '.$a.')', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].'<', ' '.$a.'<', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].'/', ' '.$a.'/', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace(' '.$rec['Title'].''', ' '.$a.''', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace('>'.$rec['Title'].' ', '>'.$a.' ', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace('>'.$rec['Title'].'.', '>'.$a.'.', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace('>'.$rec['Title'].',', '>'.$a.',', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace('>'.$rec['Title'].'<', '>'.$a.'<', $result['data'][0]['Desc']); $result['data'][0]['Desc'] = str_ireplace('('.$rec['Title'].')', '('.$a.')', $result['data'][0]['Desc']); } ?>
Chciałbym wiedzieć jak to zadanie zrealizować za pomocą wyrażeń regularnych lub chociaż jak zoptymalizować ten mój skrypt by po dodaniu jeszcze kilku znaków działało wydajnie.
Niestety szukałem rozwiązania na tym i na wielu innych forach i nie znalazłem
Z góry dzięki za pomoc