如何在T-SQL中进行HTML编码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (349)

有什么函数可以在T-SQL中编码HTML字符串吗?我有一个遗留数据库,其中包含“<”、“‘>’等可疑字符.”我可以写一个函数来替换字符,但是有更好的方法吗?

我有一个ASP.NET应用程序,当它返回一个字符串时,它包含导致错误的字符。ASP.NET应用程序正在从数据库表中读取数据。它不会写到表本身。

提问于
用户回答回答于

我一直试图在T-SQL中实现这一点,因为我的需求发生了变化,这主要是为了好玩,但我想出了一条出路。你可以使用从nchar()函数构建的Unicode字符表,也可以直接导入它,迭代从0到65535(如果只需要前512个或更少的话)。然后重建字符串。可能有更好的方法来重建字符串,但这在紧要关头是可行的。

---store unicode chars into a table so you can replace those characters withthe decimal value

`

创建表#UnicodeCharacters(DecimalValue int,UnicodeCharacter NCHAR);

--loop from 0 to highest unicode value you want and dump to the table you created
DECLARE @x INT = 0;
WHILE @x <= 65535
    BEGIN
        BEGIN
            INSERT INTO #UnicodeCharacters(DecimalValue, UnicodeCharacter)
            SELECT  @x,NCHAR(@x)
        END
        ;

        SET @x = @x + 1
        ;
    END
;

--index for fast retrieval
CREATE CLUSTERED INDEX CX_UnicodeCharacter_DecimalValue ON #UnicodeCharacters(UnicodeCharacter, DecimalValue);

--this is the string that you want to html-encode...
DECLARE @String NVARCHAR(100) = N'人This is a test - Ñ';

--other vars
DECLARE @NewString NVARCHAR(100) = '';
DECLARE @Word TABLE(Character NCHAR(1));
DECLARE @Pos INT = 1;

--run through the string and check each character to see if it is outside the regex expression
WHILE @Pos <= LEN(@String)
BEGIN
    DECLARE @Letter NCHAR(1) = SUBSTRING(@String,@Pos,1);
    PRINT @Letter;
    --rebuild the string replacing each unicode character outside the regex with &#[unicode value];
    SELECT  @NewString = @NewString + 
                CASE 
                    WHEN @Letter LIKE N'%[0-9abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-!@#$%^&*()_+-= ]%' THEN @Letter
                    ELSE '&#' + CAST(uc.DecimalValue AS VARCHAR(10)) + ';'
                END
    FROM    #UnicodeCharacters uc
    WHERE   @Letter = uc.UnicodeCharacter COLLATE JAPANESE_UNICODE_BIN

    SET @Pos += 1
END

--end result
SELECT @NewString
;

我知道你通常会用0-9A-Za-z,但出于某种原因,当我这样做时,它考虑了该表达式范围内的重音字符。因此,我显式地使用了表达式中所有不想转换为Unicode的字符。

最后,我不得不使用不同的排序规则对Unicode字符进行匹配,因为默认的拉丁排序规则(CI或其他)似乎在重音字符上不正确地匹配,就像类似的正则表达式一样。

热门问答

求云函数可用的Pandas压缩包,一直失败,出现多个C extension问题?

配置 https 配置完后报错?

女淘日记

杭州吱吱吱科技 · 站长 (已认证)

推荐已采纳

请检查服务器是否安装了代理?如有请尝试移除代理再尝试

另外,curl访问https时候需要确保服务器已经保存了证书,可以通过 curl -k --tlsv1 过滤

即时通信是否可以给小程序发送小卡片消息?

都快要考试了,从业者认证考试的准考证怎么还没发放?

您好,本月正式考试通知已经全部发送完毕。已安排考试中心重新为您发送,请注意查收站内信、邮件、短信及腾讯云助手公众号消息 如有疑问,可联系考试中心; 电话:400-8006213/13810321135 邮箱:qcloud@ats.org.cn... 展开详请

为什么绑定了域名之后的企业邮箱发送到Gmail被事儿别为垃圾邮件?

女淘日记

杭州吱吱吱科技 · 站长 (已认证)

推荐
可以通过设置DMARC来解决邮件被其他邮局识别为垃圾邮件的问题 TXT记录值为:v=spf1 include:spf.mail.qq.com ~all 详细参考记录: https://work.weixin.qq.com/help?person_id=1&doc_id=524&h...... 展开详请

腾讯云cos如何通过api获取文件的永久url?

galenye

腾讯 · 工程师 (已认证)

对象存储专业搬砖工
推荐
如果文件是公有读的,那直接拼路径即访问URL,格式如 https://<Bucket>.cos.<Region>.myqcloud.com/<Key> ,不需要接口。 如果使用的sdk,比如js sdk,则可以使用 getObjectUrl 方法 var url = cos.ge...... 展开详请

扫码关注云+社区

领取腾讯云代金券