gpt4 book ai didi

php - 如何在MySQL中对json数据进行编码以供数据库存储?

转载 作者:行者123 更新时间:2023-11-29 06:18:32 25 4
gpt4 key购买 nike

我有一个 javascript 丰富的页面,它将一个大型 JSON 格式传递给 php 以放入 MySQL 数据库中。 JSON 中的数据包括用户提交的字符串,并将包括包含基本 html 的字符串( <a><strong> 等)。

我遇到的问题是当字符串包含 ' 时引号被转义,我无法去掉斜杠,导致复合转义,如

<a href=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'example.com\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'></a>

每次用户保存时,情况都会变得复杂,数据库字段严重膨胀。

我将数据插入 MySQL 的字符串转换是:

$correspondenceArray = base64_encode(json_encode($_POST['saveArray']['correspondenceObject']));

获取数据的方法是:

function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);

return $value;
}

$correspondenceJSON = stripslashes_deep(json_decode(base64_decode($resultArray['correspondence_array']), true));

根据我所做的,我的目的是去掉数据库中数据上的斜杠,以便 JavaScript 具有未转义的数据

编辑

我意识到json_encode($a,JSON_HEX_QUOT)可能会有所帮助,但我运行的服务器有 PHP 5.2.16,因此该功能不可用)

最佳答案

不要对 SQL 使用字符串生成。

如果使用占位符,将没有问题(存储)并且不需要魔法转义。只需将其存储为 VARCHAR 类型即可。完成了,完成了。

输出(输入期间)的清理同样应该使用适当的库来完成 - 有两种不同的操作;但是,这是一个与存储不同的问题。

编辑

参见PDO作为一个准备好的语句(读:占位符)实现。其他可能存在(我不使用 PHP,但我觉得有义务纠正与手动构建的基于字符串的 SQL 查询相关的永久设计错误。)

The parameters to prepared statements don't need to be quoted; the driver automatically handles this. If an application exclusively uses prepared statements, the developer can be sure that no SQL injection will occur (however, if other portions of the query are being built up with unescaped input, SQL injection is still possible).

听起来好得令人难以置信。现在退出使用字符串生成的语句。请。

祝你编码愉快。

关于php - 如何在MySQL中对json数据进行编码以供数据库存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com