Danv 0 Denunciar post Postado Novembro 27, 2004 Pessoal, to com um problema que nem é tao complicado.... mas nao estou conseguindo resolver..... se puderem ajudar, olha só: Tenho gravado no BD em uma tabela estes dados por exemplo: -------------------Problemas comçáénão[b]negrito[/b]------------------- Como um artigo, ou notícia, com suporte a formatação como veem, ok. Estou desenvolvendo para empresa um newsletter para os clientes, justamente para enviar artigos e notícias que realmente lhes interessam, este newsletter servirá apenas para isso, será como um boletim eletrônico. então, ao enviar um email no formato html, esta tudo bem, o codigo é bem formatado o "ç" realmente aparece como "ç" e outros caracteres especiais tambem estao ok. a função para passar [b]....[/b] para negrito, utilizei, preg_replace, beleza! mas como é um newsletter, o usuario, na hora de se cadastrar no site, pode escolher a opção "Quero receber no Formato Texto Simples", beleza, esta informação é gravada junto com o email dele. Na hora de enviar como email, fiz uma formatação no notepad eheheh, e ta beleza, mas quando eu vou exibir aqueles dados acimas citados (ç,á,é,ã) jogo para outra função para retirar as tags: [b]...[/b] novamente utilizando preg_replace, pois formato texto puro nao rola colocar negrito. o problema é que o ç, ã, e outros caracteres estão saido assim: çáénão já verifiquei htmlspecialchars, htmlentities mas nao estou conseguindo arruma-los para o formato texto puro.... ja até pensei em colocar na propria função que retira a formatação de negrito (utilizando preg_replace) para trocar por ç, ã.... tentei e nao deu certo, mesmo se desse, imagina o tamanho para abranger todos os caracters ..... coisa de loco eheheh. alguem saberia como posso resolver isso? valeu pessoal Compartilhar este post Link para o post Compartilhar em outros sites
Lukas 0 Denunciar post Postado Novembro 27, 2004 Eu uso uma função que eu mesmo criei pra evitar SQL Injection e XSS, que transforma todas os carecteres execeto (A-Z, a-z, 0-9, [espaço]) pra entidades ASCII (&) !!! Funciona legal !!! E criei outra pra voltar de entidades pra texto puro !!! Essa apresentou um problema mas eu resolvi já !!! Ai vai as funções: PHP [/tr][tr]function texto2entidade($var) { $var = str_replace("'", "aspassimples", $var); $var = preg_replace("/([^ a-zA-Z0-9])/e", "\"\".ord(\"\\0\").\";\"", $var); $var = str_replace("aspassimples", "'", $var); return $var; } function entidade2texto($var) { return preg_replace("/([0-9]{1,3});/e", "chr(\\1)", $var); }[/tr] A função texto2entidade() apresentava um erro quando a entrada era '(aspas simples), então eu substituo todas '(aspas simples) antes de transformar a entrada !!! Se encontrar algum erro por favor me informe !!! Espero ter ajudado !!! Resolve bastante o problema com entidades, pelo fato de navegadore antigos não suportão entidades por nome, somente por numeros !!! Falow !!!!!!!!!! Compartilhar este post Link para o post Compartilhar em outros sites
Danv 0 Denunciar post Postado Novembro 27, 2004 Pelo que percebi da sua função, tenho certeza que vai dar certo.... logo vou testar.cara, muito obrigado :D acho que é isso mesmo :D Compartilhar este post Link para o post Compartilhar em outros sites
Danv 0 Denunciar post Postado Novembro 27, 2004 hmmmm...testei...ja ocorreu mudanças (afetando os caracteres especiais), mas a palavra cabeçalho esta sendo exibida no email recebido da seguinte maneira:cabe & # 3 8 ; c c e d i l & # 5 9 ; alho(coloquei espaços para poder ser exibido aqui no forum ehehe)bom, acho que precisa de alguns ajustes.valeu lukas, vou dar mais umas pesquisadas, se alguem souber como complementar a função texto2entidade fornecida pelo Lukas, vai ajudar muito. :D valeu pessoal Compartilhar este post Link para o post Compartilhar em outros sites
Lukas 0 Denunciar post Postado Novembro 27, 2004 essa função so funciona com entidades ASCII(& # 38 ;) ou seja & c cedil; não vai funcionar pq é uma entidade de nome !!! mude o sistema pra guardas as entidades como ASCII, trabalho com essa função à uns dois meses e achei somente esse erro !!!você entendeu ??? Use a função texto2entidade() pra pegar os dados e guardar !!! Compartilhar este post Link para o post Compartilhar em outros sites
Danv 0 Denunciar post Postado Novembro 27, 2004 bahh...entendi.....funcionou perfeitamente....valeu mesmo,viu, percebi que a utilização de entidade ASCII no html funciona perfeitamente...pelo seguinte, estes dados no BD que falei, desta maneira serão guardados do BD no formato ASCII ao inves de html, a exibição até onde percebi é normal, este conteudo vai ser exibido no site, enviado por email da forma html e de forma texto.....você ja teve algum problema com isso?ASCII >> HTML ?veja bem, só estou perguntado porque, a solução apresentada é perfeita, testei e funcionou certinho, mas como nunca utilizei entidade ASCII nos meus codigos eheheheh fico meio assim,se o pessoal souber referencias para eu dar uma estudada, agradeço muito.Lukas, valeu cara, funcionou certinho..... brigadão mesmo. :D Compartilhar este post Link para o post Compartilhar em outros sites
Lukas 0 Denunciar post Postado Novembro 27, 2004 cara, pelo pouco que eu sei as entidades ASCII são mais compativeis com navegadores antigos que as entidades de nome !!! Eu uso essas funções pra guardar dados no DB, exibir no navegador e enviar e-mails !!! O único erro q encontrei já resolvi !!!Um site muito bom pra HTML e XHTML é www.w3schools.com, porem é todo em ingles, o site é muito completo porque se baseia na W3C !!! Muito bom mesmo, vale a pena conferir !!!Se você tiver ICQ ou MSN podemos conversar, gosto muito de torcar ideias com outros programadores.ICQ: 177-688-604MSN: lukasvga@hotmail.com Compartilhar este post Link para o post Compartilhar em outros sites
Danv 0 Denunciar post Postado Novembro 28, 2004 achei sua função ótima, mas dei um pesquisada e olha só: para utilizar sua função, cara eu ia ter que mudar algumas coisas no site, inclusive alguns javascripts, pq utilizo um esquema de bbCode igual ao deste forum, e quando eu utilizo algumas tags entre [] e " .... putz eu ia ter que fazer algumas alterações..... emfim, a conversão da entrada no bd de iso para ascii tava xarope.... ia dar um trampo (o site já possui algumas noticias, iria ter que converte-las), entao encontrei na propria pagina do php.net isto... http://br2.php.net/manual/pt_BR/function.h...tity-decode.php PHP [/tr][tr]<?phpfunction decode_entities($text) { $text= html_entity_decode($text,ENT_QUOTES,"ISO-8859-1"); #NOTE: UTF-8 does not work! $text= preg_replace('/(\d+);/me',"chr(\\1)",$text); #decimal notation $text= preg_replace('/([a-f0-9]+);/mei',"chr(0x\\1)",$text); #hex notation return $text; } ?>[/tr] cara, funcionou perfeitamente..... salvo pelos gurus ehehehe. mas achei realmente interessante salvar dados como ASCII no db. Bom, fica ae a função para decodificar entidade.... Valeu pessoal, valeu Lukas! Compartilhar este post Link para o post Compartilhar em outros sites
Lukas 0 Denunciar post Postado Novembro 28, 2004 O Danv se você naum usar entidades em ASCII ou Hexadecimal nas suas páginas você pode remover as duas linhas do script: PHP [/tr][tr]$text= preg_replace('/(\d+);/me',"chr(\\1)",$text); #decimal notation$text= preg_replace('/([a-f0-9]+);/mei',"chr(0x\\1)",$text); #hex notation[/tr] Vai ficar: PHP [/tr][tr]function decode_entities($text) {$text= html_entity_decode($text,ENT_QUOTES,"ISO-8859-1"); #NOTE: UTF-8 does not work! return $text; }[/tr] Certifique sempre de usar a codificação ISO-8859-1 pra não haver problemas futuros !!! PHP [/tr][tr]Html<meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> XHtml <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> [/tr] Falow !!! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 29, 2004 há um tempo atrás eu precisei disso para caracteres UTF-8 mas não encontrei. só encontrei esses: <? function unhtmlentities($string){ //HTML_ENTITIES $trans_tbl = get_html_translation_table(HTML_SPECIALCHARS); $trans_tbl = array_flip ($trans_tbl); return strtr ($string, $trans_tbl); } // ref: http://jp2.php.net/manual/pt_BR/function.htmlentities.php function unhtmlentities2($string) { $trans_tbl = get_html_translation_table (HTML_ENTITIES); $trans_tbl = array_flip ($trans_tbl); $ret = strtr ($string, $trans_tbl); return preg_replace('/\&\#([0-9]+)\;/me', "chr('\\1')",$ret); } // ref: não lembro.. $teste = "あ"; // UTF-8 $teste = "ábaco"; ábaco echo unhtmlentities2($teste); ?> Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 29, 2004 encontrei pra quem precisar converter utf-8 http://jp2.php.net/utf8-decode <? $teste = "日本語"; nihongo $tipo = "UTF-8"; //$tipo = "Shift_JIS"; echo html_entity_decode($teste, ENT_NOQUOTES, $tipo); ?> Compartilhar este post Link para o post Compartilhar em outros sites