XML изход в PHP (UTF-8)

Следвам този урок, за да внедря Google Maps в моята уеб страница:

https://developers.google.com/maps/articles/phpsqlajax_v3#createtable

Всичко вървеше перфектно с моята връзка с база данни. Информацията в моята база данни съдържа знаци като "á,é,í"

Когато се опитам да проверя XML файла в браузъра, има тази грешка:

Тази страница съдържа следните грешки:

грешка на ред 1 в колона 10: Грешка в кодирането По-долу е изобразяване на страницата до първата грешка.

На картата данните са показани като: Bogot�. Столица на Колумбия. вместо: Богота.

Благодаря за съвета!


person Seph1603    schedule 30.03.2015    source източник
comment
stackoverflow.com/questions/4164719/utf- 8-encoding-xml-in-php   -  person s.d.a.p.e    schedule 30.03.2015
comment
Покажете ни как се свързвате с базата данни и извличате данните.   -  person user4035    schedule 30.03.2015
comment
header("Content-Type: application/xml; charset=utf-8"); за преден изход   -  person s.d.a.p.e    schedule 30.03.2015
comment
здравей, благодаря за коментара ти. Вече опитах header(Content-Type: text/xml; charset=utf-8); и все още не работи.   -  person Seph1603    schedule 30.03.2015
comment
Използвах тази функция utf8_encode и тя работи, Благодаря   -  person Seph1603    schedule 30.03.2015
comment
Трябва да видим как се свързвате с базата данни. И какви SQL команди са използвани за вмъкване/избиране на тези данни. Вероятно сте имали нещо по подразбиране CHARACTER SET latin1 вместо utf8.   -  person Rick James    schedule 30.03.2015
comment
използвайте utf8_encode utf8_decode в xml файла може би това помага като echo utf8_decode(file_get_contents(path)); и DB може би GOOGLE: MYSQL НАБОР ИМЕНА   -  person s.d.a.p.e    schedule 30.03.2015
comment
Но трябва да навлезете повече в темата за КОДИРАНЕТО: db връзка, изходно кодиране, xml кодиране ... и как работят заедно   -  person s.d.a.p.e    schedule 30.03.2015
comment
Благодаря, вече работи: echo 'datos=' . utf8_encode($row['datos']) . ' ';   -  person Seph1603    schedule 30.03.2015


Отговори (1)


Всичко вървеше перфектно с моята връзка с база данни. Информацията в моята база данни съдържа знаци като "á,é,í"

Моля, обърнете внимание на малките подробности тук:

От една страна пишеш

Всичко вървеше перфектно с моята връзка с база данни.

А от другата пишеш:

Информацията в моята база данни съдържа знаци като "á,é,í"

Така че това, което се опитвам да направя видимо тук е, че връзката към базата данни не е базата данни:

[PHP code] <--- database connection ---> [database server]-+-[data]

Връзката с базата данни е договарянето на потока от данни между сървъра и вашата програма.

Кодирането е мета-информация и където и да предавате данните (низовете), тази мета-информация за кодирането е правилна или грешна.

Когато не е наред, това може да доведе до неочаквани резултати. Резултати, каквито ги изпитвате:

Бого�. Столица на Колумбия.

(вместо „Богота. Столица на Колумбия.“)

От опит мога да ви кажа следното за тази по-голяма картина:

  1. Това, че браузърът ви дава символа �, е знак, че е уловил двоична последователност от данни, която не може да направи валидна кодова точка (да кажем буква тук накратко) от нея и да покаже тази буква добре. Вместо това той показва въпросителния знак в диаманта, за да сигнализира за проблем.
  2. Това е знак, че кодирането на Unicode се очаква и не е дадено.
  3. От опит подавате еднобайтов набор от знаци като UTF-8.

Може да има много причини за това.

Така че нека си спомним какво току-що написах по-горе за метаданните до самите данни и прегледайте връзката към базата данни:

[PHP code] <--- database connection ---> [database server]-+-[data]

И най-вече добрата новина: Връзката с базата данни ви позволява като програмист на PHP кода да кажете на базата данни какво кодиране очаквате.

След това сървърът на базата данни разглежда данните, които има, когато поискате данни от него, и ще кодира данните в кодирането, което сте поискали. Не е ли хубаво?

Така че всичко, което трябва да направите, е да кажете на сървъра на базата данни кое кодиране на знаци очаквате.

За целта трябва да знаете с кое кодиране на знаци ще подадете отговора. Това най-често е UTF-8 в мрежата в наши дни. Така че кажете на сървъра на вашата база данни, че искате UTF-8. И всичко трябва да е наред:

Редактиране: И виждайки вашите коментари: Не, добавихте utf8_encode обажданията там без нужда. Базата данни може да ви даде вече правилно кодирани данни (и винаги правилни). utf8_encode работи само за низове, кодирани с Latin-1, няма да успее, когато имате данни, различни от базата данни. Не правете това твърде конкретно, вместо това просто използвайте правилните параметри за връзката с базата данни и ще имате много по-малко неща, за които да се тревожите, защото знаете кое кодиране сте поискали.

Важен принцип: Когато е възможно, поискайте нещата, които искате, вместо да ги създавате сами.

person hakre    schedule 30.03.2015