Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]nietypowy błąd z kodowaniem, konwertowanie polskich liter na czeskie i na odwrót
-greg87g-
post 3.09.2011, 11:08:16
Post #1





Goście







witam,
mam problem z konwertowaniem znaków w ciągu. chodzi o to, że mając strina który może zawierać czeskie znaki muszę je przekonwertować na polskie oraz jeśli ma polskie odpowiedniki czeskich liter to na czeskie (chodzi o test w którym nie uwzględnia się liter diakrytycznych w odpowiedzi)

z pozoru sprawa wyglada prosto:
  1. przypadek 1:
  2. $slowo="áčěéířšůúýž";
  3. $tylko_polskie=strtr($slowo,"áčěéířšůúýž","aceeirsuuyz");
  4. $tylko_czeskie=strtr($slowo,"aceeirsuuyz","áčěéířšůúýž");
  5.  
  6. przypadek 2:
  7. $slowo2="aceeirsuuyz";
  8. $tylko_polskie2=strtr($slowo2,"áčěéířšůúýž","aceeirsuuyz");
  9. $tylko_czeskie3=strtr($slowo2,"aceeirsuuyz","áčěéířšůúýž");
  10.  


funcja ta jednak nie działa prawidłowo, po zamianie (pl<>cz) widoczne są krzaki.

strona wyświetla się w kodowaniu UTF-8, plik .php jest w kodowaniu UFT-8

nie działa również:
  1. $tylko_czeskie=mb_convert_encoding($tylko_czeskie,"UTF-8")
  2. $tylko_polskie=mb_convert_encoding($tylko_polskie,"UTF-8")

a właściwie to powoduje jeszcze większe krzaki niż bez konwersji.


sprawdziłem więc jakie jest ustawione kodowanie na każdy ze stringów i ku mojemu zdziwieniu wyszło:
  1. mb_detect_encoding($slowo); >>> zwraca UTF-8
  2. mb_detect_encoding($tylko_czeskie); >>> zwraca UTF-8
  3. mb_detect_encoding($tylko_polskie); >>> zwraca UTF-8
  4.  
  5. mb_detect_encoding($slowo2); >>> zwraca ASCII
  6. mb_detect_encoding($tylko_czeskie); >>> zwraca UTF-8
  7. mb_detect_encoding($tylko_polskie); >>> zwraca ASCII
  8.  


bardzo proszę o pomoc, już naprawde nie wiem co ma zrobić.
próbowałem również
  1. str_replace($słowo,"á",a");

dla każdej z litery osobno, ale nic z tego...
Go to the top of the page
+Quote Post
Crozin
post 3.09.2011, 11:24:50
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. abcdef... są tak samo polskie jak i czeskie. To łacińskie, nie polskie znaki.
2. Pierwsze zdanie z dokumentacji strtr:
Cytat
If given three arguments, this function returns a copy of str where all occurrences of each (single-byte) character in from have been translated to the corresponding character in to, i.e., every occurrence of $from[$n] has been replaced with $to[$n], where $n is a valid offset in both arguments.

3. http://pl.php.net/manual/en/ref.mbstring.php - poszukaj gdzieś czegoś do zamieniania znaków.
4. Swoją drogą iconv może spełniać Twoje wymagania.
Go to the top of the page
+Quote Post
-greg87g-
post 3.09.2011, 11:50:00
Post #3





Goście







sprawdziłem ten mb_... i jedyne co wydaje się byc pomocne to mb_convert_encoding() ale jak pisałem wcześniej nie działa dobrze :/

co właściwie znaczy to co wyróżniłeś? chcesz powiedzieć ze litery z ogonkami są niejednobajtowe i dlatego funkcja strtr() nie chce działać?

iconv() również nie działą, wyświetla efekt podobny do mb_convert_endcoding() tylko że wynik ma postać tylko jednej litery ;(
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: 18.04.2024 - 10:33