get_html_translation_table... Falha na conversão de conteúdo isso8859-1 para utf8

54 views
Skip to first unread message

Wemerson Couto Guimarães

unread,
Sep 13, 2012, 9:45:03 AM9/13/12
to php-b...@googlegroups.com
Pessoal, estou carregando alguns arquivos xml e os mesmos estão vindo em ISSO8859-1 e tento converter os entities de volta para os caracteres acentuados e mesmo assim não dá...

Abaixo a forma que estou convertendo:

if(mb_detect_encoding($conteudo, "UTF-8, ISO-8859-1") != "UTF-8"){

        $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $conteudo);
        $string = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $string);

        $trans_tbl = get_html_translation_table(HTML_ENTITIES);
        $trans_tbl = array_flip($trans_tbl);

        $conteudo = strtr($string, $trans_tbl);
}

$xml = simplexml_load_string($conteudo);


Mas recebo centenas de warnings como abaixo, pois não tá dando erto a conversão.

Warning:  simplexml_load_string() [function.simplexml-load-string]: Entity: line 15: parser error : Entity 'eacute' not defined in D:\Dropbox\Grupo Casa\asyncfeed.localhost\Models\XmlSimple.php on line 38




--
Wemerson Guimarães
Rio Verde - Go - Brasil

Guilherme Medeiros

unread,
Sep 13, 2012, 10:24:17 AM9/13/12
to php-b...@googlegroups.com
utf8_encode
http://www.php.net/manual/en/function.utf8-encode.php

ficando assim:


if(mb_detect_encoding($conteudo, "UTF-8, ISO-8859-1") != "UTF-8"){
    $string = utf8_encode($conteudo);
}


Atenciosamente,

 

Guilherme Medeiros

Web Developer FTW!


Socialize: Blog RSS LinkedIn Twitter


--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

Guilherme Medeiros

unread,
Sep 13, 2012, 10:27:05 AM9/13/12
to php-b...@googlegroups.com
se bem que
eacute = é

isso pode ser que você tenha caracteres codificados em html.

tenta usar essa função ANTES de usar o utf8_decode.

htmlspecialshars_decode   http://php.net/manual/en/function.htmlspecialchars-decode.php


Atenciosamente,

 

Guilherme Medeiros

Web Developer FTW!


Socialize: Blog RSS LinkedIn Twitter


Wemerson Couto Guimarães

unread,
Sep 13, 2012, 11:00:00 AM9/13/12
to php-b...@googlegroups.com
Sim eu usei o utf8_encode... o problema é que alguns acentuados dão problema... aí por exemplo: gerações vira gerações ...


Em 13 de setembro de 2012 11:24, Guilherme Medeiros <guicar...@gmail.com> escreveu:

Wemerson Couto Guimarães

unread,
Sep 13, 2012, 12:19:32 PM9/13/12
to php-b...@googlegroups.com
Sim... tem caracteres codificados e nem fazendo as substituições conforme o código abaixo deu certo...

http://pastebin.com/FfCJehwf

Veja que eu usei além das suas dicas, o código de substituição que eu estava fazendo antes...

alguns caracteres codificados ainda permanecem, como: &rsquo; e  &ndash; ... existe alguma situação mais efetiva pra converter de vez antes de fazer o utf8_encode?

Wemerson Couto Guimarães

unread,
Sep 14, 2012, 12:03:25 PM9/14/12
to php-b...@googlegroups.com
Achei o que precisava...

http://stackoverflow.com/questions/2651711/convert-php-entities-like-ndash-or-scaron-to-their-applicable-characters

No caso rodei tive que passar 2x a conversão para funcionar...

<?php

$alegacao = "alega&amp;ccedil;&amp;atilde;o"; // valor: alegação

$passo1 = decode_entities_full( $alegacao ); //  alega&amp;ccedil;&amp;atilde;o => se torna alega&ccedil;&atilde;o pois &amp; é convertido para &
$passo2 = decode_entities_full( $alegacao ); //  alega&ccedil;&atilde;o => se torna alega��o ... agora é só passar um utf_encode()

echo utf8_encode($passo2);


Mas ainda tá incompleto, pois caracteres como &ndash; e &rsquo estarão convertidos para &#8211; e &#8217; respectivamente...  mas aí é só manter o código de conversão que eu tava usando antes...

Abaixo o código completo:

http://pastebin.com/EPy6PrC0
Reply all
Reply to author
Forward
0 new messages