1

我有一个我目前正在导入 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 编码错误,因为如果我从界面手动插入带有 " 的产品,它工作正常。错误必须在我的查询中。

如果我的查询有问题,是否有可以更新所有产品而不是重新插入它们的查询?

4

3 回答 3

2

openCart 的设计使其在存储之前将要存储在数据库中的任何数据中的所有 HTML 转义。所以你只需要修改:

$data['name'] = mysql_escape_string($data['name']);

到:

$data['name'] = mysql_escape_string(htmlspecialchars($data['name'], ENT_QUOTES));
于 2012-11-07T09:33:28.143 回答
1

我不知道 OpenChart 的内部情况,但这种症状非常明显和常见:

在这里,我们看到标题在“.

这通常意味着将内容传递给 HTML,而无需先进行适当的 HTML 转义。例如,你得到这样的 INPUT:

<input type="text" value="#VAL#" />

#VAL#是一个占位符,在需要时被替换为值。但是当你的值是 ie 时Tablet 7" No Name,你的 HTML 会像这样结束:

<input type="text" value="Tablet 7" No Name" />

这清楚地解释了为什么它在 first 之后被切割"。解决方案是使用所述转义,(或使用更合适的名称 - 将特殊字符转换为实体),如果是 HTML,则可以在 PHP 中使用htmlspecialchars()函数处理,因此您的 SQL 查询与它无关 - 这只是一个问题不正确地处理 HTML 标记。

当实体被正确处理时,上面的例子(在源代码中)看起来像这样:

<input type="text" value="Tablet 7&quot; No Name" />

这样就不会对浏览器造成任何麻烦(并且浏览器还会另外将“实体正确地显示为” ")。

更多关于htmlspecialchars()HTML 中的一般特殊字符的信息请参见此处

于 2012-11-06T19:58:44.290 回答
-3

当您从表单中收集数据时,只需使用反斜杠转义所有引号\。将所有单引号替换'\'

于 2012-11-06T18:52:25.823 回答