Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Polskie małe i wielkie litery i wyszukiwanie podciągu
Forum PHP.pl > Forum > Przedszkole
drzonkins
Witam,
Mam następujący problem. Potrzebuje znaleźć ciąg znaków w innym ciągu, bez względu na wielkość liter. Sprawa jest prosta jakby się wydawało, ale komplikuje się przy polskich znakach dużych i małych.

Może przykład:
  1. $szukana = 'Łany zboża';
  2. $ciag = 'Na polu falują na wietrze łany zboża. Jest to bezsensowny tekst';
  3. $link = '<a href="">łany zboża</a>';
  4.  
  5.  
  6. //pomysl pierwszy
  7. $wynik = preg_replace('/'.$szukana.'/i',$link,$ciag,1);
  8.  
  9. //pomysl drugi
  10. $pos = stripos($ciag,$szukana);
  11. $wynik2 = substr_replace($ciag,$link,$pos,strlen($szukana));
  12.  
  13. echo $wynik;
  14. echo $wynik2;


Celem jest zamiana tych nieszczęsnych łanów na link. Chodzi mi o pierwsze napotkane łany, jeśli w tekście będzie ich więcej, to tamte mają sobie pozostać nienaruszone.
Niestety oba moje sposoby nie działają. Jeśli szukane łany rozpoczyna wielka litera "Ł", a w tekście są łany pisane małą literą, to ich nie znajduje. Gdy w szukanej zmiennej zmienię "Ł" na "ł", to wtedy znajduje.

Prawdopodobieństwo wystąpienia takiego przypadku jest raczej niskie, ale mimo to chciałbym rozwiązać problem.

Czy ktoś ma jakiś pomysł?

Z góry dzięki.

Dominis
Jeśli dobrze zrozumiałem to to Ci pomoże

  1. $wynik = preg_replace('/[łŁ]+[aA][nN]+[yY]+\s+[zZ]+[bB]+[oO]+[żŻ]+[aA]/',$link,$ciag,1);
drzonkins
No tak, ale takie podejście jest sensowne w przypadku jednego, konkretnego ciągu znaków. Co jeśli ciąg jest nieznany. Wiem, że można byłoby to wrzucić w tablicę, poszczególne litery podwajać jako mało i duże. Wolałbym jednak jakoś prościej to rozwikłać. Może ma ktoś jeszcze jakiś pomysł?
wNogachSpisz
Przeczytaj: http://pl.wikipedia.org/wiki/Strona_kodowa i pytaj dalej...
drzonkins
Tego to się akurat domyśliłem, ze problem polega na tym iż w przypadku np polskich znaków inaczej wyliczy pozycje znaku niż w przypadku standardowych...
Mi bardziej chodzi o proste rozwiązanie: jest czy nie ma? Ja szukałem i nie znalazłem. Pisząc proste mam na myśli coś co ograniczy mi to do maksymalnie kilku linijek, może jakieś usprawnienie do moich pomysłów... ?

Zdaje się, że mb_convert_case() rozwiązało problem smile.gif
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.