É 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....