PHP DomDocument的getElementsByTagName更改编码

时间:2015-05-22 20:07:02

标签: php xml character-encoding domdocument

我正在尝试解析XML,我遇到了一些我以前从未遇到的PHP DOMDocument::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时,这就是结果(所有其他标签也是如此)

  

AvenidaRepúblicadoLÃbano,1824,Goiânia

为什么会这样? getElementsByTagName正在改变XML的编码?如何解决?

仅供参考:1)我的最终目标是将这些信息保存在数据库中,已经使用utf8 enconding。 2)当我使用mb_detect_encoding($xmlToParse->saveXML())时,结果为“UTF-8”。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我打赌这不是更好的方式,但现在对我有用。只需使用以下代码完成loadXML:

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