我有一个函数可以从给定的XML字符串中删除HTML标记,如下所示:
ALTER FUNCTION dbo.fGetTextWithoutHtml
(
@Html XML
)
RETURNS NVARCHAR(2000)
AS
BEGIN
DECLARE @text NVARCHAR(2000) = CONVERT(NVARCHAR(2000), @html)
DECLARE @start INT
DECLARE @end INT
DECLARE @length INT
SET @start = CHARINDEX('
SET @end = CHARINDEX('>', @text, CHARINDEX('
SET @length = (@end - @start) + 1
WHILE @start > 0 AND @end > 0 AND @length > 0
BEGIN
SET @text = STUFF(@text, @start, @length, '')
SET @start = CHARINDEX('
SET @end = CHARINDEX('>', @text, CHARINDEX('
SET @length = (@end - @start) + 1
END
RETURN LTRIM(RTRIM(@text))
END
输入XML如下所示:
- This is a string.
预期输出为:
“ - 这是一个字符串。”
但是当我使用我的功能时,我得到一个奇怪的结果。如果我将其复制到编辑器,输出如下所示:
“ - 这是一个字符串。”
如果我将结果直接复制到SQL Server编辑器,它会在开头获得一个额外的(更宽的)连字符:
“ - 这是一个字符串。”
如何在没有HTML标签,附加连字符和前导空格的情况下获取字符串?
修改
我试图找出输入字符串中是否存在不可打印的字符:
PRINT CONVERT(NVARCHAR(2000), @html)
结果如下:
- This is a string.
我的字符串中有 。但是当我改变了
RETURN LTRIM(RTRIM(@text))
到
RETURN LTRIM(RTRIM(REPLACE(@text, ' ', '')))
结果看起来一样(空格和附加连字符仍在那里)......