Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SerraVentura

[Resolvido] Encoding Ferrado!

Recommended Posts

Seguinte, tenho uma página que vai exibir notícias de outros sites, meu sistema pega a primeira noticia de 4 sites diferentes pra fazer isso eu acessava 4 XMLs de cada site e pegava o primeiro NO... meu problema era que eu não conseguia ordenar essas noticias, então para q isso fosse possível criei um terceiro XML onde coloquei cada um desses NOS e ae sim poderia ordena-los... porém depois que fiz isso minhas acentuações começaram a CAGAR, já testei os ecodings desse terceiro XML tanto ISO quanto UTF e nada, já testei o econding do HTML e nada, já testei as funções utf8_decode, utf8_encode e nada... sendo q antes desse terceiro XML não existia esse problema...

 

e essa é minha questão, como resolvo isso ?

 

 

// Estrutura do terceiro XML:

/*

 

<news>
	<new  date=""  day="" title=""  />
	<new  date=""  day="" title=""  />
	<new  date=""  day="" title=""  />
	...
</news>
*/

começo a criar o XML...

 


#versao do encoding xml
//$domXml = new DOMDocument("1.0", "ISO-8859-1");
//$domXml = new DOMDocument("1.0", "utf-8");
$domXml = new DOMDocument();

#retirar os espacos em branco
$domXml->preserveWhiteSpace = false;
#gerar o codigo
$domXml->formatOutput = true;

#criando o nó principal (root)
$root = $domXml->createElement("news");
...

 

capturo um dos XMLs dos 4 sites

 

$xml = simplexml_load_file("http://xyz.com.br/" . $lang . "/xyz.xml");

exemplo de como capturo o titolo do XML externo e coloco no interno...

 

$title = $domXml->createAttribute("title");
$value = $domXml->createTextNode(utf8_encode($content->chamada_titulo));
$title->appendChild($value);

$new->appendChild($title);

amarro os NOS

 

$root->appendChild($new);
$domXml->appendChild($root);

 

// Captura String XML

$xmlNews = $domXml->saveXML();

 

// Cria instancia de classe extendida de DomDocument e carrego XML

$domSort = new DOMSort();
$domSort->loadXML($xmlNews);
// Efetua a ordenação

$domSort->sort( ".//new" , "compara" ); // utiliza função compara

// Cria objeto para percorrer o NO e montar o template

$xPath = new DOMXPath($domSort);
$newNos = $xPath->query("/news/new");

 

Aqui exibo na tela

foreach ($newNos as $newNo)
{

	$day = $newNo->getAttribute('day');
	$title = $newNo->getAttribute('title');

	echo utf8_decode($day);
	echo utf8_decode($title);

}

 

 

esse é o resumo do meu script, o q pode ta cagando meu ecoding ?

 

abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando dou o salvar como nele pelo bloco de notas ele ta como ANSI e na barra do meu editor tbm...

 

outro detalhe tbm é que esses XMLs externos estão como ISO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente salvar como UTF8 without BOM, editores como PHPDesigner, RapidPHP e IDE's NetBeans (este permite você encodar projetos completos). Ai na parte que imprime (echo utf8_decode(....)..) retire o utf8_decode() e imprima normalmente. Teste ae =D

OBS: Dreamweaver também deve salvar, so q nao sei como x)

Compartilhar este post


Link para o post
Compartilhar em outros sites

outro detalhe tbm é que esses XMLs externos estão como ISO

 

Bom amigo, fiz um teste aqui e não tive problema com codificação...

Olha só, o sistema de notícias do iMasters (rss) usa ISO-8859-1

 

// Carregando o RSS do iMasters
$dom_iso = new DOMDocument( '1.0' , 'ISO-8859-1' );
$dom_iso->load( 'http://forum.imasters.com.br/index.php?/rss/forums/1-noticias/' );

// Pegando o conteúdo ISO e criando um novo DOM UTF
$dom_utf = new DOMDocument( '1.0' , 'UTF-8' );
$dom_utf->loadXML( $dom_iso->saveXML() );

// O XPath vai usar o DOM com o conteúdo UTF para acessar os nós que precisamos
$xpath = new DOMXPath( $dom_utf );

// Esse aqui já é o seu XML final
$dom = new DOMSort( '1.0' , 'UTF-8' );
$news = $dom->createElement( 'news' );
$news->setAttribute( 'title' , $xpath->query( './/channel/description' )->item( 0 )->nodeValue );

$items = $xpath->query( './/channel/item' );

foreach ( $items as $item ){
    $n = $dom->createElement( 'new' );
    $n->setAttribute( 'title' , $item->getElementsByTagName( 'title' )->item( 0 )->nodeValue );
    $news->appendChild( $n );
}

$dom->appendChild( $news );

echo $dom->saveXML();

Isso retornou um XML com a acentuação certinha...

Compartilhar este post


Link para o post
Compartilhar em outros sites

acredito ter resolvido, ainda estou testando melhor...

a questão era que meu script já estava funcionando, porém me parece que o problema foi que alguns dados vindos do XML remoto ja estavam ENCODADOS e outros não, então fui testando caso a caso, alguns eu apenas dei um utf8_decode e em outros fiz primeiro o utf8_encode p/ depois fazer o utf8_decode até agora ta funcionando rs...

 

resumindo acho q o problema era q eu estava dando ENCODE em dados já "ENCODADOS"...

 

obrigado pela ajuda ae pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.