SQL Server更改html字符串中的字体 [英] SQL Server change font in html string

查看:129
本文介绍了SQL Server更改html字符串中的字体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据库中存储有字符串,格式为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆