SQL Server更改html字符串中的字体 [英] SQL Server change font in html string
问题描述
我的数据库中存储有字符串,格式为html,用户可以更改字体大小。这很好,但我需要做一个报告和字体大小都需要相同。所以,如果我有下面的html,我想修改它的字体大小为10:
< HTML> < BODY>< DIV STYLE =text-align:Left; font-family:Tahoma; font-style:normal; font-weight:normal; font-size:11; color:#000000;>< < / DAN>< / DIV>< />< / DIV>< / BODY>< / DIV>< / DIV>< ;< / HTML>
我有一个用户定义的函数,但显然,我不能在REPLACE中使用通配符,所以它实际上并没有做任何事情:
$ pre $ AL $ FUNCTION [dbo]。[udf_SetFont]
(@HTMLText VARCHAR( MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN REPLACE(@HTMLText,'font-size:%;','font-size:10;')
END
(当然,如果我将字体大小设为一个参数,所以我可以改变它。)
如何修改这个更改任何字符串,使字体大小为10?
这似乎工作,虽然我只试过一个字符串(其中字体设置在2个地方)。我开始使用剥离所有html的代码,并将其修改为仅查找并更改'font-size:*'。我怀疑如果字体大小为9或更小(1个字符),我将其更改为10(2个字符),但似乎也适用于此。
ALTER FUNCTION [dbo]。[udf_ChangeFont]
(@HTMLText VARCHAR(MAX),@FontSize VARCHAR(2))
RETURNS VARCHAR(MAX )
AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('font-size: ',@ HTMLText)
SET @End = CHARINDEX(';',@ HTMLText,CHARINDEX('font-size:',@ HTMLText))
SET @Length =(@End - @Start) + 1
WHILE @Start> 0
AND @End> 0
和@Length> 0
BEGIN
SET @HTMLText = STUFF(@ HTMLText,@ Start,@ Length,'font-size:'+ @FontSize +';')
SET @Start = CHARINDEX('字体大小:',@ HTMLText,@ End + 2)
SET @End = CHARINDEX(';',@ HTMLText,CHARINDEX('font-size:',@ HTMLText,@ End + 2))
SET @Length =(@End - @Start)+ 1
END
RETURN LTRIM(RTRIM(@HTMLText))
END
I have a strings stored in my database formatted as html, and users can change the font size. That's fine, but I need to make a report and the font sizes all need to be the same. So, if I have the following html, I want to modify it to have a font size of 10:
<HTML><BODY><DIV STYLE="text-align:Left;font-family:Tahoma;font-style:normal;font-weight:normal;font-size:11;color:#000000;"><DIV><DIV><P><SPAN>This is my text to display.</SPAN></P></DIV></DIV></DIV></BODY></HTML>
I have a user defined function, but apparently, I can't use wildcards in a REPLACE, so it doesn't actually do anything:
ALTER FUNCTION [dbo].[udf_SetFont]
(@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN REPLACE (@HTMLText, 'font-size:%;', 'font-size:10;')
END
(Of course, it would be even better if I sent the font size as a parameter, so I could change it to whatever.)
How do I modify this to change any string so the font size is 10?
This appears to work, although I've only tried it on one string (which has the font set in 2 places). I started with code that strips ALL html and modified it to only look for and change 'font-size:*'. I suspected there would be issues if the font size is 9 or less (1 character) and I'm changing it to 10 (2 chars), but it seems to work for that too.
ALTER FUNCTION [dbo].[udf_ChangeFont]
(@HTMLText VARCHAR(MAX), @FontSize VARCHAR(2))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('font-size:',@HTMLText)
SET @End = CHARINDEX(';',@HTMLText,CHARINDEX('font-size:',@HTMLText))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0
AND @End > 0
AND @Length > 0
BEGIN
SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'font-size:' + @FontSize + ';')
SET @Start = CHARINDEX('font-size:',@HTMLText, @End+2)
SET @End = CHARINDEX(';',@HTMLText,CHARINDEX('font-size:',@HTMLText, @End+2))
SET @Length = (@End - @Start) + 1
END
RETURN LTRIM(RTRIM(@HTMLText))
END
这篇关于SQL Server更改html字符串中的字体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!