我列出了目前正在导入OpenCart的1000种产品。某些产品标题包含一个引号,用于表示英寸(例如5英寸)。
我已使用此查询成功导入了所有这些产品:
$data['name'] = mysql_escape_string($data['name']);
$sql = "INSERT INTO ".DB_PREFIX."product-description SET language_id = '1', name = '".$data['name']."'";
$query = mysql_query($sql);
当我在OpenCart时,产品列表也会显示,但是当我去编辑产品时,标题输入字段(用于显示标题)会从“符号开始”中删除标题。
这是一个直观的例子:
在这里,我们看到标题已完成
在这里,我们看到标题是在“。
之后删除的我可以确认它不是OpenCart编码错误,因为如果我从界面手动插入产品“它工作正常。错误必须在我的查询中。
如果我的查询出现问题,是否有查询我可以更新所有产品而不是重新插入?
答案 0 :(得分:2)
openCart的设计使它能够在它存储在 之前的数据库中存储的任何数据中转义所有HTML。所以你只需要修改:
$data['name'] = mysql_escape_string($data['name']);
为:
$data['name'] = mysql_escape_string(htmlspecialchars($data['name'], ENT_QUOTES));
答案 1 :(得分:1)
我不知道OpenChart的内部,但这种症状非常清楚和常见:
在这里,我们看到标题是在“。
之后删除的
这通常意味着将内容传递给HTML而不先进行正确的HTML转义。例如,你有这样的INPUT:
<input type="text" value="#VAL#" />
#VAL#
是占位符,在需要时替换为值。但是,当您的值为Tablet 7" No Name
时,您的HTML将如下所示:
<input type="text" value="Tablet 7" No Name" />
清楚地解释了为什么它在第一次"
之后被切断。解决方案是使用所述转义,(或使用更合适的名称 - 将特殊字符转换为实体),在HTML的情况下可以使用{{1函数,所以你的SQL查询与它没有任何关系 - 这只是处理HTML标记的错误处理。
当实体被正确处理时,上面的例子看起来像(在源中):
htmlspecialchars()
然后不会给浏览器带来任何麻烦(浏览器会另外将“实体正确显示为<input type="text" value="Tablet 7" No Name" />
”。
更多关于"
以及HTML is here中的一般特殊字符。
答案 2 :(得分:-3)
从表单收集数据时,只需使用反斜杠\
转义所有引号。
将所有单引号'
替换为\'