Caracteres inválidos no XML

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Caracteres inválidos no XML

Mensagem por JoséQuintas »

Já tinha colocado isso no aplicativo, e não lembrava porque.
Aproveitar que olhando o manual do MDFE encontrei lá.
Isso não é no XML inteiro, se refere ao valor colocado em cada campo, entre as tags, aproveitando o exemplo do manual: <xNome>DIAS &amp. DIAS LTDA</xNome>
Não fazendo isso, é onde acontece erro de assinatura inválida, porque fica por conta da rotina de assinatura/conferência fazer a conversão do jeito que ela quiser.
caracteresxml.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Caracteres inválidos no XML

Mensagem por NiltonGM »

É verdade, esse problema ocorre também qdo damos insert ou update em uma tabela do MySQL na web, eu uso as seguintes funções ao construir o comando INSERT por exemplo para a query:

Código: Selecionar todos

sql := "INSERT ...etc"
sql += "SET razao_social = " + mysql_escape( Main.Text_RazaoSocial.Value )+ ";"
...
// Minha função
Function mysql_escape(_string)
         _string := AllTrim(_string)
         _string := mysql_escape_string(_string)         // Função da lib "libmysql.dll", essa função faz toda a troca necessária como vc mencionou Zeh
Return TirarAcentos(_string)
/*
 Essa função não é eficiente qdo se trata de UTF-8, tenho problemas com acentuação vinda do B.D. MySQL na web (Motor InnoDB, e colação utf8_general_ci), no Harbour alguns caracteres acentuado na web fica estranhos exibidos por exemplo num TextBox e não é pego por essa função.
A saber: uso HMG UNICODE ver 1.1 / HMG 3.4.3 Stable (32 bits), na edição do arquivo prg uso o Notepad++ na formatação 'Codificação em UTF-8', mesmo assim qdo vem nomes com "çã" a coisa fica feia...
*/
Function TirarAcentos(cTexto)

         cTexto := HB_UTF8STRTRAN(cTexto, "Ã", "A")
         cTexto := HB_UTF8STRTRAN(cTexto, "Á", "A")
         cTexto := HB_UTF8STRTRAN(cTexto, "À", "A")
         cTexto := HB_UTF8STRTRAN(cTexto, "Â", "A")
         cTexto := HB_UTF8STRTRAN(cTexto, "ã", "a")
         cTexto := HB_UTF8STRTRAN(cTexto, "á", "a")
         cTexto := HB_UTF8STRTRAN(cTexto, "à", "a")
         cTexto := HB_UTF8STRTRAN(cTexto, "â", "a")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ä", "A")
         cTexto := HB_UTF8STRTRAN(cTexto, "ä", "a")
         cTexto := HB_UTF8STRTRAN(cTexto, "É", "A")
         cTexto := HB_UTF8STRTRAN(cTexto, "È", "E")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ê", "E")
         cTexto := HB_UTF8STRTRAN(cTexto, "é", "E")
         cTexto := HB_UTF8STRTRAN(cTexto, "è", "e")
         cTexto := HB_UTF8STRTRAN(cTexto, "ê", "e")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ë", "E")
         cTexto := HB_UTF8STRTRAN(cTexto, "ë", "e")
         cTexto := HB_UTF8STRTRAN(cTexto, "Í", "I")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ì", "I")
         cTexto := HB_UTF8STRTRAN(cTexto, "Î", "I")
         cTexto := HB_UTF8STRTRAN(cTexto, "í", "i")
         cTexto := HB_UTF8STRTRAN(cTexto, "ì", "i")
         cTexto := HB_UTF8STRTRAN(cTexto, "î", "i")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ï", "I")
         cTexto := HB_UTF8STRTRAN(cTexto, "ï", "i")
         cTexto := HB_UTF8STRTRAN(cTexto, "Õ", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ó", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ò", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ô", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "õ", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "ó", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "ò", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "ô", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ö", "O")
         cTexto := HB_UTF8STRTRAN(cTexto, "ö", "o")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ú", "U")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ù", "U")
         cTexto := HB_UTF8STRTRAN(cTexto, "Û", "U")
         cTexto := HB_UTF8STRTRAN(cTexto, "ú", "U")
         cTexto := HB_UTF8STRTRAN(cTexto, "ù", "U")
         cTexto := HB_UTF8STRTRAN(cTexto, "û", "U")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ü", "U")
         cTexto := HB_UTF8STRTRAN(cTexto, "ü", "u")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ý", "Y")
         cTexto := HB_UTF8STRTRAN(cTexto, "ý", "y")
         cTexto := HB_UTF8STRTRAN(cTexto, "ÿ", "y")
         cTexto := HB_UTF8STRTRAN(cTexto, "Ç", "C")
         cTexto := HB_UTF8STRTRAN(cTexto, "ç", "c")
         cTexto := HB_UTF8STRTRAN(cTexto, "º", "o.")
         cTexto := HB_UTF8STRTRAN(cTexto, "", "A")
         cTexto := HB_UTF8STRTRAN(cTexto, "", "a")
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(173), "i" ) // i acentuado minusculo
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(135), "C" ) // c cedilha maiusculo
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(141), "I" ) // i acentuado maiusculo
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(163), "a" ) // a acentuado minusculo
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(167), "c" ) // c acentuado minusculo
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(161), "a" ) // a acentuado minusculo
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(131), "A" ) // a acentuado maiusculo
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(194) + Chr(186), "o." ) // numero simbolo
         // so pra corrigir no MySql (copiei de um exemplo do Zeh)
         cTexto := HB_UTF8STRTRAN( cTexto, "+" + Chr(129), "A" )
         cTexto := HB_UTF8STRTRAN( cTexto, "+" + Chr(137), "E" )
         cTexto := HB_UTF8STRTRAN( cTexto, "+" + Chr(131), "A" )
         cTexto := HB_UTF8STRTRAN( cTexto, "+" + Chr(135), "C" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(167), "c" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(163), "a" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(173), "i" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(131), "A" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(161), "a" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(141), "I" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(135), "C" )
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(156), "a" )
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(159), "A" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(129), "A" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(137), "E" )
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + "?", "C" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(149), "O" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(154), "U" )
         cTexto := HB_UTF8STRTRAN( cTexto, "+" + Chr(170), "o" )
         cTexto := HB_UTF8STRTRAN( cTexto, "?" + Chr(128), "A" )
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(195) + Chr(166), "e" )
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(135) + Chr(227), "ca" )
         cTexto := HB_UTF8STRTRAN( cTexto, "n" + Chr(227), "na" )
         cTexto := HB_UTF8STRTRAN( cTexto, Chr(162), "o" )

Return (cTexto)
Obs: Não sei pq entro do 'CODE' está com espaçamento duplo de linhas....
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Caracteres inválidos no XML

Mensagem por JoséQuintas »

Obs: Não sei pq entro do 'CODE' está com espaçamento duplo de linhas....
Aqui também acontece isso. Provavelmente está usando Windows 10 e Edge.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder