Cytat(Radarek @ 2006-01-01 13:01:51)
Hej,
Narobiłes mi na chwilę nadziei, ale niestety

Użycie funkcji preg_quote() absolutnie niczego nie zmieniło, zresztą - chyba nie mogło, bo ona modyfikuje tylko pewne znaki, których wcale nie ma w słowach, które testowałem.
(Aha - przypomnę, że cały czas chodzi mi wyłącznie o szukanie słów w ciagach UTF-8!)Reasumując:
Tylko te trzy poniższe działają dobrze (w sensie znajdują ciagi w dowolnym języku), ale przecież nie o to mi chodzi, bo ja muszę wyszukać tylko
pełne słowa, a nie ciąg liter występujący w dowolnym sąsiedztwie.
<?php
if (preg_match('/' . $slowo . '/', $linia_slownikowa))
?>
Problemy zaczynają się, gdy wprowadzam parametr
\b (lub
\\b) a przecież taki mam cel - znaleźć pełne słowa.
Wszystkie poniższe działają źle i wszystkie w taki sam sposób źle:
<?php
if (preg_match('/b' . $slowo . 'b/', $linia_slownikowa)) if (preg_match('/b' . $slowo . 'b/', $linia_slownikowa))
?>
Złe działanie polega tu na 2 rzeczach:
1) w ogóle nie są znajdywane ciagi zawierające litery hebrajskie (choć przecież jest to taki sam UTF-8 jak i litery polskie, a polskie znajduje),
2) parametr \b nie działa prawidłowo - np. jeśli szukam tylko "w", to znajduje wyraz "żół
w"! Nie znajduje natomiast wyrazów zaczynających się na "w". Dziwne.
Testowalem też dodanie parametru
u, ale to tylko pogarsza sprawę:
<?php
if (preg_match('/b' . $slowo . 'b/u', $linia_slownikowa))
?>
Wtedy ciągi zawierające choćby jedną polską literę nie są znajdowane.
Przypomnę - preg_quote() niczego nie zmieniło.
Wygląda chyba na to, że wyrażenie reg. z parametrem \b głupieje szukając w UTF-8.
Próbowałem użyć funkcji niby stworzonych do UTF-8, ale... dla odmiany... żadne z poniższych nie działa wcale, tzn. w ogóle nic nie znajdzie, w żadnym przypadku, nawet gdy zapodam do odszukania ciąg zawierajacy wyłącznie litery łacińskie:
<?php
if (mb_eregi
('/b' . preg_quote($slowo) . 'b/', $linia_slownikowa)) if (mb_eregi
('/b' . preg_quote($slowo) . 'b/', $linia_slownikowa)) if (mb_eregi('/b' . $slowo . 'b/', $linia_slownikowa))
if (mb_eregi('/b' . $slowo . 'b/', $linia_slownikowa))
?>