假设我在列中存在的数据中有一些不需要的字符,例如,customers表中的name列具有类似< ,无论如何要修改像'<'这样的字符使用select语句检索此数据时的空白?这是为了防止由于具有此类不需要的字符的旧数据而显示xss脚本
例如:
select *
from customers
返回
Id Name Age city salary
-- ------ --- ---- ------
1 <hari 32 Ahmedabad 4000
2 Khilan 25 Delhi 5678
3 kaushik 23 Kota 234
当使用select语句检索此数据时,我希望<hari
显示为hari
。如何实现此目标?
答案 0 :(得分:2)
像...一样的东西。
SELECT REPLACE(REPLACE(a.name,'<', ''), '>','')
FROM ...
答案 1 :(得分:1)
编写一个删除特殊字符的函数可能会更好。这里的函数替换了任何看起来不像a-z,A-Z(if case sensitive),0-9 and Space
的字符。如果需要,您可以添加更多。
例如,如果要保留句点(。),请使用'[^a-zA-Z0-9 .]'
<强>功能:强>
CREATE FUNCTION ufn_RemoveSpecialCharacters
(
@String VARCHAR(500),
@Exclude VARCHAR(100),
@CollapseSpaces BIT
)
RETURNS VARCHAR(500)
AS
BEGIN
DECLARE @StartString INT,
@EndString INT,
@FinalString VARCHAR(500),
@CurrentString CHAR(1),
@PreviousString CHAR(1)
SET @StartString = 1
SET @EndString = LEN(ISNULL(@String, ''))
WHILE @StartString <= @EndString
BEGIN
SET @CurrentString = SUBSTRING(@String, @StartString, 1)
SET @PreviousString = SUBSTRING(@String, @StartString-1, 1)
IF @CurrentString LIKE ISNULL(@Exclude,'[^a-zA-Z0-9 ]')
BEGIN
SET @CurrentString = ''
IF @CollapseSpaces = 1
SET @FinalString = CASE WHEN @PreviousString = CHAR(32) THEN ISNULL(@FinalString, '') ELSE ISNULL(@FinalString, '')+' ' END
END
ELSE
BEGIN
SET @FinalString = ISNULL(@FinalString, '') + @CurrentString
IF @CollapseSpaces = 1
BEGIN
SET @FinalString = REPLACE(@FinalString,' ',' ')
END
END
SET @StartString = @StartString + 1
END
--PRINT @String
RETURN LTRIM(RTRIM(@FinalString))
END
GO
<强>用法:强>
不会崩溃空间
SELECT dbo.ufn_RemoveSpecialCharacters('This #$%string has#$% special #$% characters and spaces))', '[^a-zA-Z0-9 ]', 0)
折叠多个空格
SELECT dbo.ufn_RemoveSpecialCharacters('This #$%string has#$% special #$% characters and spaces))', '[^a-zA-Z0-9 ]', 1)
答案 2 :(得分:0)
以下是示例
SELECT替换(列名,'','')AS C
FROM Contacts
WHERE替换(列名,'','')喜欢'无论'
希望这是有帮助的