Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Funkcja nie zamienia poprawnie liter
oi.
post 18.06.2010, 13:03:53
Post #1





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Funkcja:
  1. function clearDiacritics($sText)
  2. {
  3. $aReplacePL = array(
  4. 'ą' => 'a', 'ę' => 'e', 'ś' => 's', 'ć' => 'c',
  5. 'ó' => 'o', 'ń' => 'n', 'ż' => 'z', 'ź' => 'z', 'ł' => 'l',
  6. 'Ą' => 'A', 'Ę' => 'E', 'Ś' => 'S', 'Ć' => 'C',
  7. 'Ó' => 'O', 'Ń' => 'N', 'Ż' => 'Z', 'Ź' => 'Z', 'Ł' => 'L'
  8. );
  9. return str_replace(array_keys($aReplacePL), array_values($aReplacePL), $sText);
  10. }


Nie zamienia poprawnie liter Ą ą Ś ś - pomija je, w efekcie czego zamiast np ze słowa świąteczne wygenerować swiateczne otrzymuję witeczne. Gdzie jest problem ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Wave
post 18.06.2010, 13:09:20
Post #2





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Funkcja u mnie działa prawidłowo. Skąd pobierasz tekst? Sprawdź kodowanie.
Go to the top of the page
+Quote Post
oi.
post 18.06.2010, 13:18:44
Post #3





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Dane pobieram z bazy SQL poprzez wywołanie:
  1. $modtytul = clearDiacritics($tytul);
Go to the top of the page
+Quote Post
Wave
post 18.06.2010, 13:23:05
Post #4





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


dziwny objaw w sumie. sprawdź tekst z bazy bez tej funkcji, może kodowanie w bazie kradnie diakryty?
Go to the top of the page
+Quote Post
oi.
post 18.06.2010, 13:28:22
Post #5





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Zauważyłem, że ten problem jest w połączeniu z funkcją:
  1. function prepareURL($sText)
  2. {
  3. // pozbywamy się polskich znaków diakrytycznych
  4. $sText = clearDiacritics($sText);
  5. // dla przejrzystości wszystko z małych liter
  6. $sText = strtolower($sText);
  7. // wszystkie spacje zamieniamy na myślniki
  8. $sText = str_replace(' ', '-', $sText);
  9. // usuń wszytko co jest niedozwolonym znakiem
  10. $sText = preg_replace('/[^0-9a-z\-]+/', '', $sText);
  11. // zredukuj liczbę myślników do jednego obok siebie
  12. $sText = preg_replace('/[\-]+/', '-', $sText);
  13. // usuwamy możliwe myślniki na początku i końcu
  14. $sText = trim($sText, '-');
  15. return $sText;
  16. }

więc tu gdzie tkwi problem
Go to the top of the page
+Quote Post
Wave
post 18.06.2010, 13:29:40
Post #6





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


  1. $sText = preg_replace('/[^0-9a-z\-]+/', '', $sText);

to Ci wywala diakryty.
Go to the top of the page
+Quote Post
Wicepsik
post 18.06.2010, 13:29:47
Post #7





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----



  1. $sText = preg_replace('/[^0-9a-z\-]+/', '', $sText); // ten kod usuwa wszystkie znaki które nie są literami od a-z (bez polskich) i liczb oraz znaku -, wiec usuwa ci literki ć, ż itd


--------------------
Go to the top of the page
+Quote Post
oi.
post 18.06.2010, 13:34:25
Post #8





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Po usunięciu tej funkcji otrzymuję Świąteczne - a chcę swiateczne - czyli z malych liter i bez polskich znaków.
Go to the top of the page
+Quote Post
Wave
post 18.06.2010, 13:47:33
Post #9





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Coś zepsułeś pewnie.
A co to już nie wiem, bo nie widzę kodu.
Go to the top of the page
+Quote Post
oi.
post 18.06.2010, 14:08:32
Post #10





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Cały kod 2 funkcji :
  1. function clearDiacritics($sText)
  2. {
  3. $aReplacePL = array(
  4. 'ą' => 'a', 'ę' => 'e', 'ś' => 's', 'ć' => 'c',
  5. 'ó' => 'o', 'ń' => 'n', 'ż' => 'z', 'ź' => 'z', 'ł' => 'l',
  6. 'Ą' => 'A', 'Ę' => 'E', 'Ś' => 'S', 'Ć' => 'C',
  7. 'Ó' => 'O', 'Ń' => 'N', 'Ż' => 'Z', 'Ź' => 'Z', 'Ł' => 'L'
  8. );
  9. return str_replace(array_keys($aReplacePL), array_values($aReplacePL), $sText);
  10. }
  11.  
  12. function prepareURL($sText)
  13. {
  14. // pozbywamy się polskich znaków diakrytycznych
  15. $sText = clearDiacritics($sText);
  16. // dla przejrzystości wszystko z małych liter
  17. $sText = strtolower($sText);
  18. // wszystkie spacje zamieniamy na myślniki
  19. $sText = str_replace(' ', '-', $sText);
  20. // usuń wszytko co jest niedozwolonym znakiem
  21. //$sText = preg_replace('/[^0-9a-z\-]+/', '', $sText);
  22. // zredukuj liczbę myślników do jednego obok siebie
  23. $sText = preg_replace('/[\-]+/', '-', $sText);
  24. // usuwamy możliwe myślniki na początku i końcu
  25. $sText = trim($sText, '-');
  26. return $sText;
  27. }


wywołuję poprzez:
  1. $modtytul = prepareURL(clearDiacritics($tytul));
Go to the top of the page
+Quote Post
Wave
post 18.06.2010, 14:12:49
Post #11





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Naprawdę nie widzisz, że dwa razy wywołujesz clearDiacritics() ?
Go to the top of the page
+Quote Post
oi.
post 18.06.2010, 15:08:52
Post #12





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Próbuje na różne sposoby i po usunięciu clearDiacritics() z II funkcji nie pomaga sad.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: 14.08.2025 - 03:55