Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][XML] - zamiana polskich znakow
Forum PHP.pl > Forum > Przedszkole
Raffuss
Kod naglowka strony wap wyglada tak:
  1. <?
  2. header("Content-Type: text/vnd.wap.wml");
  3. header("Cache-Control: no-cache, must-revalidate");
  4. echo "<?xml version=\"1.0\"?>";
  5. echo "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\""." \"http://www.wapforum.org/DTD/wml_1.1.xml\">";
  6. echo "<wml>\n";
  7. ?>


I teraz, poniewaz pobieram dane z bazy, do ktorej rowniez wprowadzaja informacje ludzie na www, musze zamienic pl znaki i zastapic je literkami bez ogonkow.

Zastosowalem funkcje:
  1. <?php
  2. function zamiana($tekst)
  3. {
  4. $wynik = strtr($tekst, 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', 'EOASLZZCNeoaslzzcn');
  5. return $wynik;
  6. echo $wynik;
  7. }
  8. ?>


ale wynik zdania:
  1. <?php
  2. $zmienna = zamiana("jakiś tekst z PL-znakami np. ŻÓŁĆ");
  3. echo "<p>".$zmienna."</p>";
  4. ?>


wyglada na stronie tak:
  1. jakic tekst z PL-znakami np. caAScezz


Przekopałem wiele dostępnych w sieci funkcji, ale z każdej wychodzą niezidentyfikowane krzaczki, badz zdania. Czy ktoś z Was ma może jakiś pomysł na zamianę znaków?
Zyx
Po pierwsze, wartość funkcji zwraca się przez return. W Twoim przypadku zapis $zmienna = zamiana(...); jest bez sensu.

Po drugie - wszystko wskazuje na to, że używasz kodowania UTF-8, czyli unikodu, gdzie znaki o kodach od 128 wzwyż zapisywane są na więcej, niż jednym bajcie. Ciężko tu cokolwiek poradzić, czekanie na PHP6 raczej w rachubę nie wchodzi, więc pewnie będziesz musiał zrezygnować z wydajności na rzecz takich rozwiązań, jak str_replace, gdzie wrzucasz wszystkie znaki do tablic jako osobne elementy. Mbstring niestety nie ma odpowiednika strtr().
Raffuss
Na www także używam kodowania utf-8.

str_replace niestety niczego nie zmienia.. po przejsciu przez ta funkcje wciaz wyskakuje cos na styl:
  1. tu jakaamp;347; tam treamp;347;amp;263;
JoShiMa
Cytat(Zyx @ 6.10.2008, 08:20:50 ) *
Po pierwsze, wartość funkcji zwraca się przez return. W Twoim przypadku zapis $zmienna = zamiana(...); jest bez sensu.


Nie jest bez sensu. Nie wczytałeś się w kod. Bez sensu to jest tylko echo po return bo i tak się nie wykona.

Problem chyba jest gdzie indziej. W jakim kodowaniu masz polskie znaki tu:
  1. <?php
  2. $wynik = strtr($tekst, 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', 'EOASLZZCNeoaslzzcn');
  3. ?>


a w jakim kodowaniu masz w stringu, który chcesz przekonwertować? Wygląda na to, że w różnych i stąd krzaczki.
pyro
Cytat(Raffuss @ 9.10.2008, 23:16:40 ) *
Na www także używam kodowania utf-8.

str_replace niestety niczego nie zmienia.. po przejsciu przez ta funkcje wciaz wyskakuje cos na styl:
  1. tu jakaamp;347; tam treamp;347;amp;263;

Raffuss, a jak to robiles za pomoca str_replace jesli mozna spytac?
JoShiMa
Cytat(Raffuss @ 9.10.2008, 23:16:40 ) *
Na www także używam kodowania utf-8.
  1. tu jakaamp;347; tam treamp;347;amp;263;


Nie zauważyłam wcześniej. No i właśnie tu masz problem. String w utf-8 a znaki w funkcji w windows. To niby jak ma się dobrze konwertować ?
Chrom
a dlaczego nie dajesz deklaracji

  1. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />


i jakie masz kodowanie bazy danych?
zmień kodowanie bazy na utf8 jak możesz i daj ewentualnie

  1. mysql_query("SET NAMES 'utf8'");


przed zapytaniem
wtedy odpada cała zamiana
Raffuss
Wiec tak:

Kodowanie strony i wysylany naglowek w utf-8 na www:
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

wap takze ustwilem utf-8:
  1. <?xml version="1.0" encoding="utf-8"?>


System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: UTF-8 Unicode (utf8)
Metoda porownywania napisow w tabelach: utf8_unicode_ci

po polaczeniu z baza wywolanie polecenia:
@mysql_query("SET NAMES 'utf-8'", $baza);

Dlatego wlasnie nie mam pojecia czemu az takie krzaki wyswietla.. Jezeli macie dalsze pomysly, chetnie wyslucham. Inaczej bedzie wszedzie z krzakami.. :/

Cytat(pyro @ 10.10.2008, 10:35:14 ) *
Raffuss, a jak to robiles za pomoca str_replace jesli mozna spytac?

Np tak..
  1. <?php
  2. function sprawdz($text) {
  3.                                $text = str_replace("ą","a",$text);
  4.                                return $text;
  5.                                }
  6. ?>
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.