每当我在PHP表单域中添加单引号(')或双引号(“)时,它将作为"
/ '
保存在我的MySQL数据库中。如何保存'我的DB中真正的“引号”?
我尝试通过PDO建立安全的Mysql连接来防止这种情况,但它似乎无法正常工作。
所以这是我的代码的重要部分:
$insert_hello = filter_var($_POST['hello'], FILTER_SANITIZE_STRING);
$dbh->query("SET NAMES 'utf8'");
$stmt = $dbh->prepare("INSERT INTO testtable (data) VALUES (:hello)");
$stmt->bindParam(':hello', $insert_hello, PDO::PARAM_STR);
$stmt->execute();
一些背景信息:
服务器在PHP v5.2.12-0上运行。
DBStorage引擎是InnoDB,其客户端,连接,结果和系统字符集设置为utf8。
DB字段的排序规则设置为utf8_unicode_ci。
通过.htaccess禁用魔术引号。
提前致谢!
亲切的问候, Jroen
答案 0 :(得分:0)
最好的想法是保持原样并在阅读时解码html。
答案 1 :(得分:0)
您可以使用php函数$decoded_insert_hello = html_entity_decode($insert_hello, ENT_QUOTES)
来执行此操作。
http://www.php.net/manual/en/function.html-entity-decode.php
答案 2 :(得分:0)
好的,只是为了正确回答:
问题是由将filter_var()
转换为HTML实体的$dbh->query("SET NAMES 'utf8'");
$stmt = $dbh->prepare("INSERT INTO testtable (data) VALUES (:hello)");
$stmt->bindParam(':hello', $_POST['hello'], PDO::PARAM_STR);
$stmt->execute();
引起的。因为PDO会为您执行此操作,因此无需手动清理数据。
你可以写这样的东西,应该可以正常工作:
{{1}}
答案 3 :(得分:0)
这是我的数据作为 API 响应的样子,我想将其存储在 MYSQL 数据库中。它包含引号、HTML 代码等。
示例:-
{
rewardName: "Cabela's eGiftCard $25.00",
shortDescription: '<p>adidas gift cards can be redeemed in over 150 adidas Sport Performance, adidas Originals, or adidas Outlet stores in the US, as well as online at <a href="http://adidas.com/">adidas.com</a>.</p>
terms: '<p>adidas Gift Cards may be redeemed for merchandise on <a href="http://adidas.com/">adidas.com</a> and in adidas Sport Performance, adidas Originals, and adidas Outlet stores in the United States.'
}
解决方案
CREATE TABLE `brand` (
`reward_name` varchar(2048),
`short_description` varchar(2048),
`terms` varchar(2048),
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
插入时,接着JSON.stringify()
let brandDetails= {
rewardName: JSON.stringify(obj.rewardName),
shortDescription: JSON.stringify(obj.shortDescription),
term: JSON.stringify(obj.term),
}
上面是JSON对象,下面是向MySQL插入数据的SQL查询。
let query = `INSERT INTO brand (reward_name, short_description, terms)
VALUES (${brandDetails.rewardName},
(${brandDetails.shortDescription}, ${brandDetails.terms})`;
它的工作....
如果没有任何效果,试试这个:
var res = str.replace(/'/g, "\\'");
var res = res.replace(/"/g, "\\\"");
它将 \ 转义字符添加到所有出现的 ' 和 "
不确定它是否是解决问题的正确/专业方法
我猜它会起作用,但在实际内容中,每个单引号和双引号都将替换为 \ 字符