Tratamento de caracteres não permitidos XML

1,938 views
Skip to first unread message

DANIEL VIANA

unread,
Oct 7, 2011, 3:38:02 PM10/7/11
to nfe...@googlegroups.com
Pessoal,

as vezes encontro problema ao assinar o XML pelo fato do mesmo possuir caracteres acentuados ou caracteres como ( ° ).  Sempre aparece um caractere novo pra dar problema. Tenho uma função(abaixo) para remover esses caracteres, mas com certeza a mesma está incompleta. Alguem tem alguma função melhor para barrar os caracteres proibidos ou liberar apenas os permitidos?
Obrigado.

function remover_acento($str)
{  
        $from = 'ÀÁÃÂÉÊÍÓÕÔÚÜÇàáãâéêíóõôúüçüäïöëÿ!#¬^´`¹²³ªº<>"';
        $to = 'AAAAEEIOOOUUCaaaaeeiooouucuaioey              ';
        return strtr($str, $from, $to);    
}


--
Daniel Viana'

Deyvison Rocha

unread,
Oct 7, 2011, 3:50:22 PM10/7/11
to nfe...@googlegroups.com
Daniel, 

Tenta utilizar o str_replace. Lembrando que para cada palavra acentuada uma linha...

Outra forma é utilizar expressão regular!

Olha esses códigos:


<?php

function trataTxt($var) {

	$var = strtolower($var);
	
	$var = ereg_replace("[áàâãª]","a",$var);	
	$var = ereg_replace("[éèê]","e",$var);	
	$var = ereg_replace("[óòôõº]","o",$var);	
	$var = ereg_replace("[úùû]","u",$var);	
	$var = str_replace("ç","c",$var);
	
	return $var;
}

echo "Texto com acento:" . "á é í ó ú";
echo "<br>";
echo "Texto sem acento:" . trataTxt("á é í ó ú");

?>



______________________________
Deyvison Rocha
Desenvolvedor PHP
http://www.deyvisonrocha.com.br / blog.deyvisonrocha.com.br / www.iasdarruda.org
+55 (81) 8504-6651 (Oi) / 9792-6199 (Tim) / 8201-8156 (Vivo)
LinkedIn | Twitter | Facebook



DANIEL VIANA

unread,
Oct 7, 2011, 4:08:34 PM10/7/11
to nfe...@googlegroups.com
Deyvison,
minha função funciona blz. Mas que queria tipo um expressao regular pra deixar passar so os caracteres permitidos e não precisar de ficar dando manutenção na função a cada novo caractere especial que apareça.
Mesmo assim muito obrigado.

2011/10/7 Deyvison Rocha <deyv...@gmail.com>



--
Daniel Viana'

Deyvison Rocha

unread,
Oct 7, 2011, 4:21:36 PM10/7/11
to nfe...@googlegroups.com
Daniel,

Dá uma lida nisso... muito bom!


Resolverá seu problema.
______________________________
Deyvison Rocha
Desenvolvedor PHP
http://www.deyvisonrocha.com.br / blog.deyvisonrocha.com.br / www.iasdarruda.org
+55 (81) 8504-6651 (Oi) / 9792-6199 (Tim) / 8201-8156 (Vivo)
LinkedIn | Twitter | Facebook



Elton Nagai

unread,
Oct 7, 2011, 5:33:01 PM10/7/11
to nfe...@googlegroups.com
Daniel,
Porque você não utiliza a função __limpaString que está na classe ConvertNFePHP.class.php ?
Elton

Em 7 de outubro de 2011 17:08, DANIEL VIANA <danie...@gmail.com> escreveu:

Deyvison Rocha

unread,
Oct 7, 2011, 7:56:39 PM10/7/11
to nfe...@googlegroups.com
Elton,

Estou com a versão v2.0 e não achei esta função de __limpaString. Tem certeza que existe ela?

Valeu.
______________________________
Deyvison Rocha
Desenvolvedor PHP
http://www.deyvisonrocha.com.br / blog.deyvisonrocha.com.br / www.iasdarruda.org
+55 (81) 8504-6651 (Oi) / 9792-6199 (Tim) / 8201-8156 (Vivo)
LinkedIn | Twitter | Facebook



Elton Nagai

unread,
Oct 7, 2011, 8:09:04 PM10/7/11
to nfe...@googlegroups.com
http://www.assembla.com/code/nfephp/subversion/nodes/branches/2.0/libs/ConvertNFePHP.class.php
/**
     * __limpaString
     * Remove todos dos caracteres espceiais do texto e os acentos
     *  
     * @version 1.02
     * @package NFePHP
     * @author  Roberto L. Machado <linux.rlm at gmail dot com>
     * @return  string Texto sem caractere especiais
     */
     private function __limpaString($texto){
        $aFind = array('&','á','à','ã','â','é','ê','í','ó','ô','õ','ú','ü','ç','Á','À','Ã','Â','É','Ê','Í','Ó','Ô','Õ','Ú','Ü','Ç');
        $aSubs = array('e','a','a','a','a','e','e','i','o','o','o','u','u','c','A','A','A','A','E','E','I','O','O','O','U','U','C');
        $novoTexto = str_replace($aFind,$aSubs,$texto);
        $novoTexto = preg_replace("/[^a-zA-Z0-9 @,-.;:]/", "", $novoTexto);
        return $novoTexto;
    }//fim __limpaString

Deyvison Rocha

unread,
Oct 7, 2011, 8:15:34 PM10/7/11
to nfe...@googlegroups.com
Bem... Não tenho culpa de na versão do site está com a versão do arquivo 2.16 e na SVN está com a versão 2.26.


______________________________
Deyvison Rocha
Desenvolvedor PHP
http://www.deyvisonrocha.com.br / blog.deyvisonrocha.com.br / www.iasdarruda.org
+55 (81) 8504-6651 (Oi) / 9792-6199 (Tim) / 8201-8156 (Vivo)
LinkedIn | Twitter | Facebook



DANIEL VIANA

unread,
Oct 13, 2011, 12:48:32 PM10/13/11
to nfe...@googlegroups.com
Elton,
essa função pode ser usada na string inteira do txt?
Obrigado

2011/10/7 Deyvison Rocha <deyv...@gmail.com>



--
Daniel Viana'

Elton Nagai

unread,
Oct 13, 2011, 1:20:10 PM10/13/11
to nfe...@googlegroups.com
Não... pq a expressão regular remove todos os caracteres diferentes de letras, numeros ou @,-.;: ...

DANIEL VIANA

unread,
Oct 13, 2011, 1:24:07 PM10/13/11
to nfe...@googlegroups.com
Entendi.
Muito Obrigado.

2011/10/13 Elton Nagai <elt...@gmail.com>



--
Daniel Viana'
Reply all
Reply to author
Forward
0 new messages