Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] z bazy przez php do xml - kodowanie
Forum PHP.pl > Forum > XML, AJAX > XML
lando
Witam wszystkich.

Jako że pierwszy raz to dobry wieczór.
Mam taki oto problem:
Za pomocż php z bazy pobieram sobie jakieś tam dane i robie z tego xml, używając najprostszego kodu pod słońcem:
[php:1:1da1dc1325]<?php
$newsy=array();
$i=0;

$pyt=mysql_query("SELECT * FROM spispod ORDER BY ID") or die (mysql_error());

$myxml="<?xml version="1.0" encoding="UTF-8" ?>
<calemenu>";

while($odp=mysql_fetch_object($pyt))
{
$myxml.="<menu id="".$i."">
<nazwa>".$odp->nazwa."</nazwa>
<nazwatxt>".$odp->nazwatxt."</nazwatxt>
</menu>";
$i++;
}

$myxml.="</calemenu>";

echo $myxml;
?>[/php:1:1da1dc1325]

plik php jest zapisany w utf-8, mimo to polskie literki (docelowo hiszpańskie) nie pokazują się, wyświetla się taki błąd:
Cytat
Znaleziono nieprawidłowy znak w zawartości tekstowej. Błąd podczas przetwarzania zasobu 'http://localhost/cv/php/menu.php'. Wiersz 16, Pozycja 13

<nazwa>

siedzę nad tym juz długo. Wiecie może jak ten problem rozwiązać?
kszychu
A w bazie masz jakie kodowanie? Też utf czy może coś innego? Jeśli coś innego zainteresuj się funkcją iconv().
lando
nie mam pojęcia jak sprawdzić kodowanie w jakim to jest w bazie zapisane. wiem tylko, że tabele są w myISAM, ale to nie o to chodzi. mógłbyś powiedzić jak to sprawdzić? z iconv() chyba nie bedzie dobrze, bo nie moge nic dodawać, ani grzebać w ustawieniach php na serwerze. po prostu nie mam takich uprawnień.
lando
naprawde nikt nie wie. ehh a myslalem ze bedzie tak latwo i fajnie....
kszychu
Najpierw sprawdź, jakie kodowanie masz w bazie. Jak? Wygeneruj tego xmla z różnymi kodowaniami, i zobacz, przy którym nie będziesz miał krzaków a polskie litery. Następnie poszukaj funkcji konwertującej z jednego kodowania na inne. Założę się, że jest takich funkcji sporo.
lando
Sęk w tym, że nie moge takiego xml wygenerować, bo wyskakuje mi błąd, który opisałem w 1 poście. Jak na tym poziomie zmienić kodowanie nie mam zielonego pojęcia. Chętnie potestuje te kodowania, tylko powiedz jak....
kszychu
A co jest w tym wierszu 16 w pliku, w którym pojawia się błąd?
lando
sprawdzałem i kombinowałem z tym. Błąd ten pojawia się zawsze tam, gdzie pierwszy raz pojawia się polska literka, w tym wypadku "Ł".
MaKARON
Problem jest w tym, że próbujesz generować pliki w UTF-8 a php nie w takim formacie przechowuje stringi. Użyj jakiegoś xmlwritera - one maja zazwyczaj odpowiednie funkcje do konwersji. Skoro z polskimi znakami nie mają problemu, to z hiszpańskimi tez nie będą miały. Nie wiem, czy nie będziesz musiał wtedy zrezygnować z UTF na rzecz któregoś z ISO-8859-?.
lando
a jakiego xmlwrite'a polecasz? Powiem szczerze, że nie jestem mocny w php, z reszta to widac. Chcialem tylko za pomoca php zrobic sobie najprostszego xml, a potem go polaczyc z flash'em. Najwieszy problem w tym wszystkim to te znaki.

Aha, czy cos bede musial instalowac na serwie? Bo jesli tak to takie rozwiazanie odpada, bo nie mam takich uprawnien. jestem zwyklym userem.
lando
dla zinteresowanych link http://w3.creaciones-virtuales.com/php/menu.php. Heh dziwna z tym jest sprawa. Raz wyswietla sie blad, robimy F5 i pokazuje sie xml taki jak powinien byc. Niestety w obu przypadkach jak wezmiemy "pokaz źródło" literka "Á" nie pokazuje sie. naprawde to zaczyna mi to powoli bokiem wychodzic. Dlaczego tak jest i jak to poprawic?
MaKARON
http://phpxmlclasses.sourceforge.net/ tutaj są ogólne klasy obsługi XML
http://www.phpclasses.org/browse/package/250.html - ja używam tej klasy, tam możesz ustawić kodowanie wejściowe. NIe trzeba instalować, to tylko klasa. Warto poeksperymentowac.
lando
no nie wiem. nie za silnie sie czuje w php, ale moze cos sie uda zrobic. czy moglbys mi wyslac ta klase na mejla lando20@interia.pl . mam problem zeby sciagnac ta klase ze strony.
e-Gandalf
A ja bym Ci polecal zamiast wstawiac kod xml inline, stworzyc sobie dokument (w pamieci) a potem przez DOM wstawiac kolejne elementy/atrybuty. Z tego co mi wychodzi w testach DOMowy createTextNode w php 5 dziala dobrze i na UTF-8 pracuje poprawnie.
Wogule uwazam, ze obsluge UTF-8 to najbardziej pomijana zmiana od PHP4 - w tej chwili mam testowy kawalek serwisu ktory parsuje z bazy do XML, XML validuje z DTD (encje jezykowe), i transforumuje XSLT, a nastepnie wynik daje na ekran - wszystko pracuje w UTF-8 i napotkalem tylko jeden problem winksmiley.jpg
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.