Removendo e Bloquear o uso Caracteres especiais
24/10/2014
0
Gostaria de ajuda de vcs com relacao a um problema que tenho aqui na empresa.
Gosataria de saber se existe alguma forma pratica de removermos os caracteres especiais no banco, alguma funcao ou comando especifico.
E tambem se eh possivel fazer algum tipo de bloqueio para o uso destes caracteres.
Estou fazendo algumas pesquisas na net tbm, se alguem tiver ou souber e puder me ajudar, fico "devendo". rssr
Desde ja agradeco.
Abraco.
Alex Lekao
Post mais votado
07/11/2014
ALTER FUNCTION [dbo].[FN_REMOVE_CHAR_ESPECIAL] (@TXTINICIAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @TXTSEQUENCIA VARCHAR(MAX) /* CARACTERES MINUSCULOS */ SET @TXTSEQUENCIA = REPLACE(@TXTINICIAL COLLATE Latin1_General_BIN,char(225),'a') --SELECT 'á',ASCII('á'); --225 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(224),'a') --SELECT 'à',ASCII('à'); --224 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(227),'a') --SELECT 'ã',ASCII('ã'); --227 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(226),'a') --SELECT 'â',ASCII('â'); --226 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(233),'e') --SELECT 'é',ASCII('é'); --233 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(232),'e') --SELECT 'è',ASCII('è'); --232 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(234),'e') --SELECT 'ê',ASCII('ê'); --234 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(237),'i') --SELECT 'í',ASCII('í'); --237 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(236),'i') --SELECT 'ì',ASCII('ì'); --236 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(238),'i') --SELECT 'î',ASCII('î'); --238 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(243),'o') --SELECT 'ó',ASCII('ó'); --243 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(242),'o') --SELECT 'ò',ASCII('ò'); --242 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(244),'o') --SELECT 'ô',ASCII('ô'); --244 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(245),'o') --SELECT 'õ',ASCII('õ'); --245 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(250),'u') --SELECT 'ú',ASCII('ú'); --250 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(249),'u') --SELECT 'ù',ASCII('ù'); --249 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(251),'u') --SELECT 'û',ASCII('û'); --251 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(252),'u') --SELECT 'ü',ASCII('ü'); --252 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(231),'c') --SELECT 'ç',ASCII('ç'); --231 /* CARACTERES MAIUSCULOS */ SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(193),'A') --SELECT 'Á',ASCII('Á'); --193 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(192),'A') --SELECT 'À',ASCII('À'); --192 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(194),'A') --SELECT 'Â',ASCII('Â'); --194 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(195),'A') --SELECT 'Ã',ASCII('Ã'); --195 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(201),'E') --SELECT 'É',ASCII('É'); --201 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(200),'E') --SELECT 'È',ASCII('È'); --200 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(202),'E') --SELECT 'Ê',ASCII('Ê'); --202 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(205),'I') --SELECT 'Í',ASCII('Í'); --205 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(204),'I') --SELECT 'Ì',ASCII('Ì'); --204 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(206),'I') --SELECT 'Î',ASCII('Î'); --206 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(211),'O') --SELECT 'Ó',ASCII('Ó'); --211 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(210),'O') --SELECT 'Ò',ASCII('Ò'); --210 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(212),'O') --SELECT 'Ô',ASCII('Ô'); --212 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(213),'O') --SELECT 'Õ',ASCII('Õ'); --213 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(218),'U') --SELECT 'Ú',ASCII('Ú'); --218 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(217),'U') --SELECT 'Ù',ASCII('Ù'); --217 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(219),'U') --SELECT 'Û',ASCII('Û'); --219 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(220),'U') --SELECT 'Ü',ASCII('Ü'); --220 SET @TXTSEQUENCIA = REPLACE(@TXTSEQUENCIA COLLATE Latin1_General_BIN,char(199),'C') --SELECT 'Ç',ASCII('Ç'); --199 RETURN (@TXTSEQUENCIA) END
Fabiano Carvalho
Mais Posts
28/10/2014
Fabiano Carvalho
Voce pode criar um função e verificar qual é o codigo asc dele e dar um replace pra vazio, ou substituir para algo que voce queira, estou meio sem tempo agora, mas a idéia é essa, amanha durante o dia se voce nao conseguir resolver eu retorno para auxiliar melhor.
29/10/2014
Alex Lekao
Pode deixar que comento aqui sim. rsrs
sim, eu ate fazia isso antes, qdo era tudo local, agora que esta na cloud nao estou fazendo mais, e no sistema anterior eu mantinha um ambiente de testes / homologacao, neste erp atual o pessoal nao tem isso.
tbm acho interessante poder ter essa possibilidade, ja comentei no passado, a resposta foi que nao tinham e nao disponibilizavam isso, mas quem sabe pedindo mais umas vezes(200 talves. rsrsr) eles amolecem o coracao e liberam. rssr
Você podia tentar pedir se é possível criar uma base testes que fique fixa e sempre com o mesmo nome.
Nunca apanhe esse banco. Elimine tabelas, limpe os dados quantas vezes for necessário, restaure backups de diferentes bases...
Parece meio louco, mas talvez seja uma idéia útil... =D
Blz, eu estive pensando em algo do tipo tbm, ate achei functions na net que ajudaria, mas tudo muito superficial, trigger? sem chance, os caras bloquearam isso no banco, eu tinha uma que funcionava perfeitamente e hj nao mais. rsrsrsr(pq foi removida e bloqueado o uso. rsrsr)
mas Fabiano, muito obrigado pelo empenho, toda ajuda eh bem vinda.
Voce pode criar um função e verificar qual é o codigo asc dele e dar um replace pra vazio, ou substituir para algo que voce queira, estou meio sem tempo agora, mas a idéia é essa, amanha durante o dia se voce nao conseguir resolver eu retorno para auxiliar melhor.
29/10/2014
Fabiano Carvalho
Com isso voce pode remover os já existentes. Pra novos valores, acredito que você possa criar uma constraint do tipo check, e nisso você faz os valores passar por essa função; (Precisa dar alter table ... alter column)
Link da tabela asc: [img]http://www.asciitable.com/index/asciifull.gif[/img]
Dúvidas, só sinalizar.
CREATE FUNCTION [dbo].[FN_REMOVER_CHAR_INVALIDO] (@DIRTY VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @CLEAN VARCHAR(MAX) DECLARE @STEP INT SET @STEP = 1 DECLARE @STR TABLE(CARACTERES VARCHAR(MAX)) INSERT INTO @STR(CARACTERES) SELECT '' AS CARACTERES WHILE @STEP <= LEN(LTRIM(RTRIM(@DIRTY))) BEGIN IF (ASCII(SUBSTRING(@DIRTY,@STEP,1)) >= 65 AND ASCII(SUBSTRING(@DIRTY,@STEP,1)) <= 90) --Alterar Esse filtro OR ASCII(SUBSTRING(@DIRTY,@STEP,1)) IN (32,44,45,46) --e esse tambem BEGIN SET @CLEAN = SUBSTRING(@DIRTY,@STEP,1) UPDATE @STR SET CARACTERES = CARACTERES + @CLEAN END SET @STEP = @STEP + 1 END RETURN(SELECT CARACTERES FROM @STR) END
06/11/2014
Alex Lekao
Desculpe cara, nem cheguei a tentar, fiquei fora do forum por um tempo, muita correria do dia a dia aqui.
cara se eu entendi bem essa funcao eh show, ela isola os caracteres normais e os mais usados, virgula, ponto, traco, essas coisas certo?
mas no caso nao eh feita nenhuma substituicao por um outrao caracter correspondente, correto?
por exemplo, faça ficaria faa, certo?
vou me organizar aqui e fazer uns testes.
Obrigado!!!!
06/11/2014
Fabiano Carvalho
Clique aqui para fazer login e interagir na Comunidade :)