![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Kiedyś napisałem klasę ModRewriteString, którą opublikowałem na łamach forum.php.pl, która ma sprowadzić polskie, niemieckie i czeskie znaki do zwykłych liter, na przykład ą do a, ż i ź do z, itd.
Cytat Żółw Który żyje -> zolw-ktory-zyje Na potrzeby jednego z moich projektów (portalu) została ona użyta na kodowaniu UTF-8. Okazało się, że klasa akceptuje tylko kodowania WINDOWS-1250 i ISO 8859-2. Ze znaków zakodowanych przez UTF robił się znak nieodczytywalny, potocznie zwany "krzak". Problem został oznaczony jako bug najwyższego stopnia, klasa trafiła natychmiastowo do analizy. Z pomocą przyszła dokumentacja na temat Multibyte String Functions (rozdział LXXXV) dostępna w podstawowych rozdziałach oficjalnej dokumentacji języka php: http://pl2.php.net/manual/pl/ref.mbstring.php Ponadto cały dokument z klasą był zakodowany w formie ASCII, co jest niedorzeczne w tego typu działaniach. Plik zawierający klasę został ujęty w formie UTF-8 - uniwersalnego kodowania, które można bez problemu odkowodać. Zmiany objęły tylko metodę Rewrite(), przyjmuje ona dodatkowy, nieobowiązkowy drugi parametr, który ustawia tryb pracy klasy na podane kodowanie. Gdy parametru nie podamy, lub otrzyma wartość null, wówczas kodowanie zostanie ustawione automatycznię poprzez analizę podanego ciągu znaków przez funkcję mb_detect_encoding(). Kodowanie jest o tyle ważnym elementem, gdyż zostaje podane wewnątrz klasy w funkcjach mb_strtolower() oraz mb_strlen(), odpowiedzialnych za poprawne wykonanie zadania metody. Dodana została linijka odpowiedzialna za przerwania działania klasy juz na samym początku. Sprawdzane zostaje załadowane rozszerzenie "mbstring", odpowiedzalne za Multibyte String Functions. Gdy rozszerzenie nie zostanie załadowane, konstruktor wyrzuca wyjątek pierwotnej klasy Exception:
Wersja klasy została oficjalnie uznana za stabilną, nadany jest jej numerek 0.0.3. Zastosowanie klasy:
Pobierz ModRewriteString 0.0.3 Zapraszam do ocen klasy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 24.09.2003 Skąd: Giżycko / Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Parę uwag:
1. Z każdym wywołaniem metody Rewrite uruchamiasz prywatną metodę _ReplaceChars, w której deklarujesz nową tablicę ze znakami do zmiany. Wybrałeś mało wydajne rozwiązanie - lepiej tę tablicę zadeklarować w konstruktorze klasy, zamiast przy każdym wywołaniu _ReplaceChars. 2. W metodzie Rewrite przed pętlą for zainicjuj zmienną $sRewrited = ''; 3. Moim zdaniem, klasa może być spokojnie używana z metodami statycznymi (czyli bez konieczności tworzenia obiektu klasy), gdyż w zasadzie nie operuje na żadnych wewnętrznych właściwościach. Tablicę ze znakami do zamiany możesz ustawić jako static, a same tłumaczenie stringa wyglądałoby:
Ten post edytował Denver 27.12.2006, 15:34:29 |
|
|
![]()
Post
#3
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Denver: słusznie, parę rzeczy poprawionych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pobierz ModRewriteString 0.0.4 --- EDIT --- użycie:
Ten post edytował Athlan 27.12.2006, 16:33:00 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 24.09.2003 Skąd: Giżycko / Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Fragment:
też mógłby być w jakiś sposób cache'owany. Np. tak:
a pod ciałem klasy ModRewriteString kod:
Zapewni Ci to wykonanie tego kodu tylko raz, w momencie dołączenia pliku z klasą do Twojego skryptu. |
|
|
![]()
Post
#5
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Denver: szczeże to zbyt zabajerowane, jak na akcje, która wkłada kilkadziesiąt jednoznakowych elementów do tablicy, ale słuszna uwaga - dobry pomysł, zastosuje go w innych klasach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Dosc komiczna klasa - osoba piszaca 'framework' nie ma pojecia o wyrazeniach regularnych....
Ten post edytował NuLL 27.12.2006, 18:09:44 |
|
|
![]()
Post
#7
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Jak dla mnie trochę myląca nazwa komponentu, co to ma wspólnego z ModRewrite?
|
|
|
![]()
Post
#8
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Dosc komiczna klasa - osoba piszaca 'framework' nie ma pojecia o wyrazeniach regularnych.... Faktycznie, nie pomyślałem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dlatego prezentuję następną wersję klasy, już bez zbierania jakichkolwiek znaków, wykonywania pętli. Wszystko zawarte jest w jednym RegExp. Zniknął problem z kwestią omawianą przez @SHiP'a. Prezentuję wersję 0.0.5 Cytat Jak dla mnie trochę myląca nazwa komponentu, co to ma wspólnego z ModRewrite? Może dlatego, że zmienia mi zwykły tytuł newsa, bądż atrykuły na string używane w modrewrite? Moim zdaniem (przynajmniej dla mnie) nazwa trafna. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 574 Pomógł: 2 Dołączył: 13.04.2004 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
to przecież można zrobić kilkoma preg_replace (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 17:50 |