Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zmiana znaków w ciągu
Forum PHP.pl > Forum > Przedszkole
phisis
Witam,
Mam skrypt, który potrzebny mi jest do zmiany polskich znaków (ę, ć, ż, ź, itp) na ich odpowiedniki bez ogonków. Oto kod:

//podmiana polskich znakow w tytule
$polskie_znaki = array('ó', 'ż', 'ź', 'ł', 'ć', 'ń', 'ś', ' ', 'ę'); //Lista polskich znakow
$podmienione_znaki = array('o', 'z', 'z', 'l', 'c', 'n', 's', '_', 'e'); // Lista podmienionych znakow
$wynik = str_replace($polskie_znaki, $podmienione_znaki, $tytul);
echo strtolower($wynik);

Wszystko ładnie działa za wyjątkiem ostatniego znaku. PHP zamienia mi tytuły poprawnie (tj. zmienia znaki na małe i bez ogonków), za wyjątkiem ostatniej ("ę").
Czy ktoś z Was wie dlaczego tak jest?
PiXel2.0
Mysle, ze moze byc to spowodowane tym, ze przed 'ę' jest spacja ktora z jakiejs przyczyny zatrzymuje zamiane kolejnych znakow.

U mnie na PHP 5.2.5 dziala prawidlowo i zamienia wszystkie znaki, ale w starszych wersjach moze byc blad.

Dla pewnosci przestaw spacje na wszesniejsza pozycje (i analogicznie znak '_' w drugiej tablicy).
Jesli od spacji nie bedzie zamieniac kolejnych znakow to znaczy, ze jest tak jak napisalem wyzej.

P.S.: zapomniales o 'ą' winksmiley.jpg
Gość
Niestety zmiana kolejności elementów tablic nie pomaga. PHP nie zmienia elementów ciągu nawet gdy w tablicy znajduje się tylko jeden element (ę > e). Tak samo jest z 'ą'. Mam PHP 5.2.5.
ayeo
Może masz po prostu problem z kodowaniem? Masz tekst do przeróbki w tym samym pliku to te tablice?
U mnie zmiana kodowania na ISO pomogła.
PiXel2.0
Ja sprawdzalem na UTF-8 (oczywiscie przy uzyciu mb_strtolower()) i dziala prawidlowy.

Twoj kod dziala tak:
Jesli w oryginalnym tytule sa male polske znaki to obcina im ogonki.
Jesli w oryginalnym tytule sa duze polskie znaki to zastaja zamienione na male (nie obcina im ogonkow).

Moze nie o to Ci chodzilo i pomyliles kolejnosc z jaka nalezy zastosowac funkcje ?

Gdybys zastosowal funkcje strtolower() na tytule przed usunieciem ogonkow to mialbys same male znaki bez ogonkow a tak to jesli w tytule masz duze 'Ę' lub 'Ą' to ogonki nie zostana usuniete wiec po zamianie na male znaki otrzymasz 'ę' i 'ą' z ogonkami.
Gość
Wcześniej w kodzie jest fragment zmniejszający duże litery na małe (strtolower()) tylko nie zacytowałem go tutaj.

Sprawdziłem jednak jeszcze raz kodowanie i okazało się, że była pewna nieścisłość - stąd problemy przy konwersji znaków. Dziękuję serdecznie wszystkim za pomoc. Pozdrawiam!
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.