Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Polskie małe i wielkie litery i wyszukiwanie podciągu
drzonkins
post 6.10.2011, 18:06:34
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 1.06.2010

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


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.

Go to the top of the page
+Quote Post
Dominis
post 6.10.2011, 19:31:56
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


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);


--------------------
www.maxcode.pl
Go to the top of the page
+Quote Post
drzonkins
post 6.10.2011, 20:42:50
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 1.06.2010

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


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ł?
Go to the top of the page
+Quote Post
wNogachSpisz
post 6.10.2011, 23:23:52
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Przeczytaj: http://pl.wikipedia.org/wiki/Strona_kodowa i pytaj dalej...
Go to the top of the page
+Quote Post
drzonkins
post 7.10.2011, 20:29:41
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 1.06.2010

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


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
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: 29.04.2025 - 08:28