You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Curl获取的JSON中转义HTML还原后存入SQL Server?

解决SQL Server中HTML标签被Unicode转义的问题

核心原因

你遇到的是JSON转义后的Unicode编码(比如\u003cul\u003e对应<ul>)被存入数据库,需要还原成原始HTML标签。这种情况通常是数据插入前未完成正确的Unicode解析,或是被二次转义导致的。

恢复方法

PHP代码层面处理

因为你用了json_decode,可以利用JSON解析器自带的Unicode转义还原能力:

// 假设从数据库取出的转义字符串为 $escaped_html
$original_html = json_decode('"' . $escaped_html . '"');

如果字符串中包含双引号,需要先转义:

$escaped_html = str_replace('"', '\\"', $escaped_html);
$original_html = json_decode('"' . $escaped_html . '"');

也可以用正则替换直接解析Unicode编码:

$original_html = preg_replace('/\\\\u([0-9a-fA-F]{4})/', function($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $escaped_html);

SQL Server数据库层面处理

如果不想修改应用代码,可以创建自定义函数批量还原:

CREATE FUNCTION dbo.UniDecode(@input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS BEGIN
    DECLARE @output NVARCHAR(MAX) = @input;
    DECLARE @pos INT = CHARINDEX('\u', @output);
    
    WHILE @pos > 0
    BEGIN
        DECLARE @code NVARCHAR(4) = SUBSTRING(@output, @pos + 2, 4);
        DECLARE @char NCHAR(1) = NCHAR(CONVERT(INT, @code, 16));
        SET @output = STUFF(@output, @pos, 6, @char);
        SET @pos = CHARINDEX('\u', @output);
    END
    
    RETURN @output;
END

使用时直接调用函数:

SELECT dbo.UniDecode(your_html_column) AS original_html FROM your_table;

避免后续重复出现

  • 插入前确认json_decode已正确解析:默认json_decode会自动将Unicode转义转换为对应字符,检查插入数据库前的变量是否为原始HTML。
  • 使用参数化查询:用PDO或sqlsrv的参数绑定插入数据,避免驱动自动转义特殊字符。
  • 数据库字段类型选NVARCHAR(MAX):确保字段支持存储任意长度的UTF-8文本,不要使用会自动转义的字段类型。

内容的提问来源于stack exchange,提问作者Stefano Coccia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:05:07