Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML] problem z czytaniem wyników (polskie znaki)
Forum PHP.pl > Forum > XML, AJAX
Vasquez21
Witam,

Mam problem z odczytaniem polskich liter z xml'a. Troszkę przeszukałem już forum, ale być może źle szukam, a być może nie było takiej sytuacji.

Nie wiem dlaczego ale podczas czytania z bazy wyników otrzymuję dziwne symbole, takie jak:
?
?
Ä
?
?
?
?
?
Â
?

Znalazłem w necie, że zapis: mb_convert_encoding($player[3],"HTML-ENTITIES","UTF-8") pozwolił mi się pozbyć tych dziwnych symboli i wreszcie xml został rozpoznany przez parser.
Teraz jednak nie wiem co zrobić, żeby zobaczyć polskie litery... bo tym razem mam zamiast polskich liter: & # 3 2 2; itp.
Poniżej wrzucam kod z pliku php.
Baza jest ustawiona na utf-8, plik też jest zapisany jako utf-8 (przynajmniej tak mi pokazuje jEdit)

  1. <?php
  2. header('Content-Type: text/html; charset = UTF-8');
  3.  
  4. ini_set('display_errors', 'On');
  5. include "../connect.php";
  6.  
  7. class XmlWriterClassVasquez {
  8. var $xml;
  9. var $indent;
  10. var $stack = array();
  11.  
  12. function XmlWriterClassVasquez($indent = ' ') {
  13. $this->indent = $indent;
  14. $this->xml = '<?xml version="1.0" encoding="utf-8"?>'."\n";
  15. }
  16. function _indent() {
  17. for ($i = 0, $j = count($this->stack); $i < $j; $i++) {
  18. $this->xml .= $this->indent;
  19. }
  20. }
  21. function push($element, $attributes = array()) {
  22. $this->_indent();
  23. $this->xml .= '<'.$element;
  24. foreach ($attributes as $key => $value) {
  25. $this->xml .= ' '.$key.'="'.htmlentities($value).'"';
  26. }
  27. $this->xml .= ">\n";
  28. $this->stack[] = $element;
  29. }
  30. function element($element, $content, $attributes = array()) {
  31. $this->_indent();
  32. $this->xml .= '<'.$element;
  33. foreach ($attributes as $key => $value) {
  34. $this->xml .= ' '.$key.'="'.htmlentities($value).'"';
  35. }
  36. $this->xml .= '>'.htmlentities($content).'</'.$element.'>'."\n";
  37. }
  38. function emptyelement($element, $attributes = array()) {
  39. $this->_indent();
  40. $this->xml .= '<'.$element;
  41. foreach ($attributes as $key => $value) {
  42. $this->xml .= ' '.$key.'="'.htmlentities($value).'"';
  43. }
  44. $this->xml .= " />\n";
  45. }
  46. function pop() {
  47. $element = array_pop($this->stack);
  48. $this->_indent();
  49. $this->xml .= "</$element>\n";
  50. }
  51. function getXml() {
  52. return $this->xml;
  53. }
  54. }
  55.  
  56. $xml = new XmlWriterClassVasquez();
  57.  
  58. $array = array();
  59.  
  60. $q = mysql_query("SELECT ID_user, nick, rank, firstname, lastname FROM rank_users") or die("blad1");
  61. while ($result = mysql_fetch_array($q))
  62. {
  63. array_push($array, array($result['ID_user'], $result['nick'], $result['rank'], $result['firstname'], $result['lastname']));
  64. }
  65.  
  66. $xml->push('players');
  67. foreach ($array as $player) {
  68. $xml->push('player');
  69. $xml->element('PlayerId', $player[0]);
  70. $xml->element('PlayerAlias', mb_convert_encoding($player[1],"HTML-ENTITIES","UTF-8"));
  71. $xml->element('PlayerRank', $player[2]);
  72. $xml->element('PlayerName', mb_convert_encoding($player[3],"HTML-ENTITIES","UTF-8"));
  73. $xml->element('PlayerSurname', mb_convert_encoding($player[4],"HTML-ENTITIES","UTF-8"));
  74. $xml->pop();
  75. }
  76. $xml->pop();
  77.  
  78. print $xml->getXml();
  79. ?>
Crozin
1. Czy wyświetlając dane jako normalny tekst występują problemy z kodowaniem (bez babrania się z mb_convert_encoding)?
2. Po co tworzysz jakieś kulawe narzędzie do tworzenia dokumentu XML, skoro istnieją gotowe, takie jak DOM czy XMLWriter?
Vasquez21
ad 1, tak... wywala coś w stylu:
Znaleziono nieprawidłowy znak w zawartości tekstowej. Błąd podczas przetwarzania zasobu 'adres strony... <PlayerSurname>Ga&Aring;

ad 2, prawdę powiedziawszy potrzebowałem czegoś na szybko, znalazłem gotowe rozwiązanie i użyłem.

viking
Jak łatwo się domyślić w poprawnym dokumencie XML nie ma prawa wystapić bezpośrednio &, zamień wcześniej na &amp;
Vasquez21
hmm ale w bazie nie ma &... to jest coś co wyskakuje mi przy polskich literach właśnie.
Przepraszam jesli źle Cię zrozumiałem.
viking
A nie, sorki, źle spojrzałem. Tam masz &Aring;. Masz set names przy połączeniu ustawione?
Vasquez21
Nie miałem, teraz dodałem... cały mój connect wygląda teraz tak:
  1. mysql_connect ('zzz','zzz','zzz') or die('error: Błąd z połączeniem');
  2. mysql_select_db ('zzz') or die('error: Nie znaleziono bazy');
  3. mysql_query("SET NAMES 'utf-8'");
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.