Ir para conteúdo

POWERED BY:

Arquivado

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

ticarp

Acentos em XML via API DOM!

Recommended Posts

Fala pessoal!!

Com base no curso do Wilker sobre API DOM, resolvi gerar um xml puchando dados de um bd.

 

Só que não que aparecem acentos complica tudo.

 

Se uso iso-8859-1 o xml é gerado até o momento em que aparece o primeiro acento, dai o script trava com os seguintes erros:

 

Warning: output conversion failed due to conv error in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 38Warning: Bytes: 0xE3 0x3C 0x2F 0x64 in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 38Warning: encoder erroroutput conversion failed due to conv error in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 40Warning: Bytes: 0xE3 0x3C 0x2F 0x64 in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 40
Se uso uft-8 o xml é gerado por completo mas os acentos são ignorados. Ficando assim as palavras:

 

Amanh? (Amanhã), Jos? (José)...
Esse é o código do script:

 

<?function createContato($document, $nome, $data, $email, $texto, $aniversario, $id) {     $contato = $document->createElement("contato");    $nomeN = $document->createElement("nome", $nome);    $dataN = $document->createElement("data", $data);    $emailN = $document->createElement("email", $email);	$textoN = $document->createElement("texto", $texto);	$idN = $document->createElement("id", $id);         $contato->setAttribute("aniversario", $aniversario);          $contato->appendChild($nomeN);    $contato->appendChild($dataN);    $contato->appendChild($emailN);	$contato->appendChild($textoN);	$contato->appendChild($idN);         return $contato; } $dom = new DOMDocument("1.0", "ISO-8859-1");$dom->preserveWhiteSpace = false;$dom->formatOutput = true;$root = $dom->createElement("teste");mysql_connect("localhost", "ticarp_admin", "465446");mysql_select_db("ticarp_banco");$xml = mysql_query("SELECT * FROM `xml`");while ($line = mysql_fetch_assoc($xml)) {  $root->appendChild(createContato($dom, $line['nome'], $line['data'], $line['email'], $line['texto'], $line['aniversario'], $line['id']));}$dom->appendChild($root); $dom->save("contatos.xml");echo $dom->saveXML();?>
Já li que se usasse iso-8859-1 e depois passasse um utf8_decode() sairia acentuado, mas o script trava antes conforme dito antes.

 

Conto com vcs!!! :D

 

Tiago.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo, você pode fazer um teste, funcionou numa aplicação que fiz... nao sei se ai funfaria

function htm2xhtm($str){  $padrao  = array("/á/","/ú/","/ã/","/ç/","/é/");  $replace = array("á","ú","ã","ç","é");  return preg_replace($padrao, $replace, $str); }

pega a string vinda do DOM passa por essa funcao e ve se funfa[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa saida cara!! :D vou tentar testar ela mais tarde! a principio larguei de mão a API DOM pra gerar o meu xml, tô fazendo na unha. :D Resumindo, a API DOM tá bugada quanto a essa questão de acentos?Valeu carinha!!Tiago.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa aqui foi minha saída:

 

<?mysql_connect("localhost", "ticarp_admin", "******");mysql_select_db("ticarp_banco");$xml = mysql_query("SELECT * FROM `xml`");$versao = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";echo $versao;while ($line = mysql_fetch_assoc($xml)) {	echo "<item id=\"".$line['data']."\">\n";	foreach ($line as $k => $l) {        if ($k == "texto"){  echo "<".$k.">\n<![CDATA[".$l."]]>\n</".$k.">\n";  }  elseif ($k != "data") {  echo "<".$k.">".$l."</".$k.">\n";    }	}	echo "</item>\n";}?>

Aqui ela funcionando.

http://www.tiagoalencar.com/gerando_xml_bd_unha5.php

 

Tiago.

Compartilhar este post


Link para o post
Compartilhar em outros sites

opabom, não é o DOM em si, é o proprio XML que não aceita acentos =/, tipo eu ainda nao aconselho a usar DOM, porque ele so virou padrao apartir do php5, entao ate o php5 dominar os servidores, eu nao aconselho..tipo que bao que você conseguiu resolver seu problema, so adiciona um detalhe para retornar um arquivo XML

<?header("Content-type: text/xml");mysql_connect("localhost", "ticarp_admin", "******");mysql_select_db("ticarp_banco");$xml = mysql_query("SELECT * FROM `xml`");echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";while ($line = mysql_fetch_assoc($xml)) {echo "<item id=\"".$line['data']."\">\n";foreach ($line as $k => $l) {      if ($k == "texto"){ echo "<".$k.">\n<![CDATA[".$l."]]>\n</".$k.">\n"; } elseif ($k != "data") { echo "<".$k.">".$l."</".$k.">\n";  }}echo "</item>\n";}?>

é isso[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

boas novas amigos!

Estava com o mesmo problema, e resolvi da seguitne forma:

 

Usei a função utf8_encode() (ao contrário do que você ditou, usando o utf8_decode())

Funcionou que é uma beleza.

 

Espero ter ajudado.

 

abraços

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Fala pessoal!!

Com base no curso do Wilker sobre API DOM, resolvi gerar um xml puchando dados de um bd.

 

Só que não que aparecem acentos complica tudo.

 

Se uso iso-8859-1 o xml é gerado até o momento em que aparece o primeiro acento, dai o script trava com os seguintes erros:

 

Warning: output conversion failed due to conv error in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 38Warning: Bytes: 0xE3 0x3C 0x2F 0x64 in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 38Warning: encoder erroroutput conversion failed due to conv error in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 40Warning: Bytes: 0xE3 0x3C 0x2F 0x64 in /home/ticarp/public_html/gerando_xml_bd_decode.php on line 40
Se uso uft-8 o xml é gerado por completo mas os acentos são ignorados. Ficando assim as palavras:

 

Amanh? (Amanhã), Jos? (José)...
Esse é o código do script:

 

<?function createContato($document, $nome, $data, $email, $texto, $aniversario, $id) { 	$contato = $document->createElement("contato");	$nomeN = $document->createElement("nome", $nome);	$dataN = $document->createElement("data", $data);	$emailN = $document->createElement("email", $email);	$textoN = $document->createElement("texto", $texto);	$idN = $document->createElement("id", $id);	 	$contato->setAttribute("aniversario", $aniversario); 	 	$contato->appendChild($nomeN);	$contato->appendChild($dataN);	$contato->appendChild($emailN);	$contato->appendChild($textoN);	$contato->appendChild($idN);	 	return $contato; } $dom = new DOMDocument("1.0", "ISO-8859-1");$dom->preserveWhiteSpace = false;$dom->formatOutput = true;$root = $dom->createElement("teste");mysql_connect("localhost", "ticarp_admin", "465446");mysql_select_db("ticarp_banco");$xml = mysql_query("SELECT * FROM `xml`");while ($line = mysql_fetch_assoc($xml)) {  $root->appendChild(createContato($dom, $line['nome'], $line['data'], $line['email'], $line['texto'], $line['aniversario'], $line['id']));}$dom->appendChild($root); $dom->save("contatos.xml");echo $dom->saveXML();?>
Já li que se usasse iso-8859-1 e depois passasse um utf8_decode() sairia acentuado, mas o script trava antes conforme dito antes.

 

Conto com vcs!!! :D

 

Tiago.

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.