Edyta Floras

Edyta Floras Trener on-line /
Konsultant ds.
marketingu

Temat: kodowanie

Proszę o pomoc

właśnie próbuję wygenerować XML z danymi z bazy danych. Początek mojego skryptu wygląda tak

echo ('<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nokaut SYSTEM "http://www.nokaut.pl/integracja/nokaut.dtd">');

if (!($db = mysqli_connect('serwer', 'user', 'haslo' , 'baza'))) {
die ('BŁĄD SQL: Nieudana próba połączenia z bazą');
} ;



w wyniku zapytania otrzymuje dane z 'krzakami' (?) - zamiast polskich znaków pojawiają się znaki zapytania

co powinnam wpisać w treści skryptu aby kodowanie się zgadzało?

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

z góry dziękuję za pomoc
Szymon Perski

Szymon Perski Właściciel
PerskiMedia

Temat: kodowanie

<?php
header('Content-Type: text/xml; charset=utf-8');
?>
Daj na poczatku skryptu, jak jeszcze beda jakies krzaki to zaraz po polaczeniu z baza wykonaj zapytanie:

SET NAMES utf8;
Edyta Floras

Edyta Floras Trener on-line /
Konsultant ds.
marketingu

Temat: kodowanie

heh

Na początku skryptu nic nie mogę dać, ponieważ jest kłopot z parsowaniem pliku XML

kiedy po zapytaniu daje - SET NAMES utf8;

pojawia się:
Parse error: syntax error, unexpected T_STRING in C:\wamp\www\moje\xml.php on line 12
Szymon Perski

Szymon Perski Właściciel
PerskiMedia

Temat: kodowanie

<?php
header('Content-Type: text/xml; charset=utf-8');
echo ('<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE nokaut SYSTEM "http://www.nokaut.pl/integracja/nokaut.dtd">');

if (!($db = mysqli_connect('serwer', 'user', 'haslo' , 'baza'))) {

die ('BŁĄD SQL: Nieudana próba połączenia z bazą');

} ;
mysql_query("SET NAMES utf8");
?>

O to mi chodziło :]

Nagłówki (czytaj funkcja Header();) możesz dodawać na początku skryptu o ile nic przed nim się nie wykonuje, taki sam naglowek dodaje jak generuje sitemap.xml i wszystko jest oki,

W razie problemow zapraszam na priv :)Szymon Perski edytował(a) ten post dnia 13.11.08 o godzinie 21:17

Temat: kodowanie

Do obsługi XML zamiast takiego niepewnego printowania, polecam użyć jakichś funkcji uniwersalnych - SimpleXML (http://pl.php.net/simplexml ) albo DOM (http://pl.php.net/DOM ). Wtedy nie trzeba się martwić, że coś nam popsuje markup, dane ładujemy do obiektu, który później tylko "wyrzucamy" na wyjście i voila ;)Rafał Nowak edytował(a) ten post dnia 13.11.08 o godzinie 22:28

konto usunięte

Temat: kodowanie

SET NAMES UTF8 COLLATE UTF8_GENERAL_CI
Jakub Korupczyński

Jakub Korupczyński Software Developer

Temat: kodowanie

Nagłówki (czytaj funkcja Header();) możesz dodawać na początku skryptu o ile nic przed nim się nie wykonuje, taki sam naglowek dodaje jak generuje sitemap.xml i wszystko jest oki,

To tak może trochę precyzyjniej :) Nagłówki muszą być wysyłane na samym początku, czyli jeśli dasz jakiś kod to będzie ok. Jak dasz jakiś kod np wypisujący coś na ekranie to już będzie błąd.
Szymon Perski

Szymon Perski Właściciel
PerskiMedia

Temat: kodowanie

No tak chciałem własnie to lopatologicznie napisać ale zabrakło czasu :) ewentualnie "na poczatku" czyli w miejscu do momentu którego nie zostal wypisany żaden znak mozna dać ob_start()wtedy mozna troche tym manipulowac :]
Krzysztof P.

Krzysztof P. Programista, Team
Leader

Temat: kodowanie

Rafał Nowak:
Do obsługi XML zamiast takiego niepewnego printowania, polecam użyć jakichś funkcji uniwersalnych - SimpleXML (http://pl.php.net/simplexml ) albo DOM (http://pl.php.net/DOM ). Wtedy nie trzeba się martwić, że coś nam popsuje markup, dane ładujemy do obiektu, który później tylko "wyrzucamy" na wyjście i voila ;)Rafał Nowak edytował(a) ten post dnia 13.11.08 o godzinie 22:28

Jest jeszcze XMLWriter, zależy co kto chce.
Chociaż osobiście nie widzę jakiejś zdecydowanej zalety przy używaniu tego, jedynie że całość jest ładniej napisana. (choć działa wolniej)
Szymon Perski

Szymon Perski Właściciel
PerskiMedia

Temat: kodowanie

Nie chciałem podawać jakichś sposobow zastepczych na zrobienie tego gdyż autorka wątku jest na podstawowym poziomie jak widać :) I pewnie chodziło jej o najprostsze rozwiązanie pod słońcem :)

konto usunięte

Temat: kodowanie

(http://pl.php.net/simplexml ) albo DOM (http://pl.php.net/DOM ).

Osobiscie tez polecalbym DOM, chociaz jest z tym troche pisania...
Zawsze mozna jednak owinac w jakas wlasna klase czy zestaw funkcji i miec gotowca na przyszlosc.

Na koniec, juz po wygenerowaniu XML sprawdzilbym jeszcze czy produkt jest zgodny ze zdefiniowanym schematem, bo roznie moze byc ;)

Cos a'la:


$xml = 'wygenerowany XML';
$dom = new DOMDocument;
$dom->loadXML($xml);
$dom->schemaValidate('sciezka do schematu') ? echo $dom->saveXML() : die('bubu');

Temat: kodowanie

Krzysztof P.:
Jest jeszcze XMLWriter, zależy co kto chce.
Chociaż osobiście nie widzę jakiejś zdecydowanej zalety przy używaniu tego, jedynie że całość jest ładniej napisana. (choć działa wolniej)

Jeśli chodzi o samo generowanie XMLa to masz pewność, że to co wygenerujesz będzie poprawnym XML'em, a później dużo łatwiej jest taki kod zmodyfikować.

Piszę o SimpleXML lub DOM, bo sensu używania XMLWritera nie bardzo widzę ;)Rafał Nowak edytował(a) ten post dnia 14.11.08 o godzinie 16:36
Edyta Floras

Edyta Floras Trener on-line /
Konsultant ds.
marketingu

Temat: kodowanie

heh i nitki :(

na chwilę obecną próbuję w najprostszy dla mnie sposób stworzyć ten plik, ładnie wyciąga dane za wyjątkiem czcionek :/

w chwili obecnej wygląda mój skrypt tak

header('Content-Type: text/xml; charset=utf-8');
echo ('<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nokaut SYSTEM "http://www.nokaut.pl/integracja/nokaut.dtd">');

if (!($db = mysqli_connect('serwer', 'login', 'haslo' , 'baza'))) {
die ('BŁĄD SQL: Nieudana próba połączenia z bazą');
} ;
mysql_query("SET NAMES UTF8 COLLATE UTF8_GENERAL_CI");


próbowałam sposobu Szymona i Kuby heh .. ale nie bardzo pomaga.

Jak tylko ogarnę podstawy zabieram się za SimpleXML tudzież DOM - wiem że w dalszej pracy sporo ułatwią :)

jeśli macie jeszcze jakieś pomysły, z góry dziękuję :)
Jakub Korupczyński

Jakub Korupczyński Software Developer

Temat: kodowanie

Tutaj jest jeszcze taka kwestia jakie dane zostały wpisane do bazy. Jak wpiszesz do bazy danych tekst napisany w iso, to ustawienia bazy nie będą ważne a tekst i tak będzie w iso.

Spróbuj stworzyć ten plik w iso albo wincp i zobaczyć czy będzie dobrze.



Wyślij zaproszenie do