2015-05-22 1 views
1

Я пытаюсь разобрать XML, и мне приходится сталкиваться с некоторыми проблемами с PHP DOMDocument::getElementsByTagName, которые у меня никогда не было.PHP DomDocument's getElementsByTagName смены кодировки

Это мой код, чтобы получить XML-

$xmlToParse = new MXML('1,0','UTF-8'); 
$xmlToParse->loadXML(<myXML>); 
//print_r ($xmlToParse->saveXML());die(); 

Когда я использую print_r, это результат (часть):

<Hotel> 
<HotelId>10333</HotelId> 
<HotelName>Papillon Hotel</HotelName> 
<Address>Avenida República do Líbano, 1824,Goiânia</Address> 
<District>SETOR OESTE</District> 
<City>Goiania</City> 
<State>GO</State> 
<Country>Brasil</Country> 
<ZIP>74115 - 030</ZIP> 
<Localization>Urbano com Atrativo</Localization> 
<Category>Muito Confortável</Category> 
<StarLevel>4</StarLevel> 
<Descricao>O Papillon Hotel tem o orgulho e o prazer em servir bem, oferecendo aos hóspedes diversas opções em lazer, saúde e gourmet. O café da manhã é servido de segunda a sexta-feira, entre 6hs e 10hs, com acesso pelo elevador "R". Aos sábados, domingos e feriados, para seu maior conforto, o serviço se entende das 06hs às 11hs. O Papillon Hotel conta com restaurante de padrão internacional, com opções de pratos à la carte ou buffet executivo, em um agradável ambiente com vista panorâmica da cidade. E aos sábados, você ainda encontra a melhor feijoada da cidade. No lobby do hotel, um sofisticado e aconchegante Café Bistrô convida os hóspedes e não-hóspedes a desfrutarem de um mix variado de saladas, risotos, sanduíches e massas de sabor requintado, além de deliciosas sobremesas e cafés expresso e gelado E na cobertura o único SPA da cidade com toda estrutura de alto padrão em um hotel. Você encontra um completo complexo de lazer e Spa, o primeiro e único Spa do Centro-Oeste com toda a estrutura de um hotel do mais alto padrão. Desfrute de piscina, duchas, saunas seca e a vapor, salas de ginástica e musculação e sala de massagem e beleza. E, de presente, leve uma vista panorâmica de Goiânia. Dispostos nas categorias standard, luxo, suí­te e suí­te presidencial , os apartamentos do Papillon Hotel se destacam pelo bom gosto, requinte, decoração e excelência em produtos e serviços prestados. Nos apartamentos do Papillon Hotel, você vai encontrar: ar condicionado central, telefones com discagem direta, som ambiente, TV a cabo, frigobar, entrada para computador, serviço de despertador e room-service.  </Descricao> 
<HorarioCheckin>14:00</HorarioCheckin> 

Все по-видимому, хорошо. Следующим шагом является получение значений тегов, так что мой код получить адрес:

$hotelTag = $hotelDetailResponseTag->getElementsByTagName('Hotel')->item(0); 
$addressTagValue = $hotelTag->getElementsByTagName('Address')->item(0)->nodeValue; 
//print_r ($addressTagValue);die(); 

Когда я использую print_r, что является результатом (то же самое происходит со всеми другими тегами)

Avenida República do LÃbano, 1824, Goià ¢ nia

Почему это происходит? getElementsByTagName меняет кодировку XML? Как это исправить?

FYI: 1) Моя конечная цель - сохранить эту информацию в базе данных, уже с использованием utf8. 2) Когда я использую mb_detect_encoding($xmlToParse->saveXML()), результатом является «UTF-8».

+0

Это не PHP. это ваша среда отображения, имеющая неправильный набор символов. например вы принимаете ваш utf8 xml и выплевываете его в веб-браузер iso8859. –

+0

Спасибо @MarcB Я печатаю в консоли, но я думаю, что это не проблема, потому что когда я отлаживаю свой код и точку останова, мой $ addressTagValue var я все еще получаю проблему в средстве просмотра IDE и когда я сохраняю информацию в базе данных (utf8) проблема также сохраняется. – James

ответ

0

У меня есть обходной путь к этой проблеме.

Держу пари, что это не лучший способ, но работал для меня пока. Просто заполните loadXML с помощью этого кода:

$xmlToParse->loadXML(mb_convert_encoding($strHotelDetailResult->textContent,'UTF-8',mb_detect_encoding($strHotelDetailResult->textContent))); 

 Смежные вопросы

  • Нет связанных вопросов^_^