Php 将逗号转换为html实体?可能吗?

Php 将逗号转换为html实体?可能吗?,php,mysql,Php,Mysql,我想知道是否有可能获取一个文本块,获取所有逗号并将它们转换为相应的html实体。类似于htmlentities($var,ENTQUOTES)的功能,只是逗号 可能是我把问题复杂化了。我试图实现的是从用户处获取一个textarea值,该值可能包含逗号,从而搞乱以下代码: $sql = "INSERT INTO blog (title, date, author, article, category) VALUES (".$title.", ".$date.", ".$a

我想知道是否有可能获取一个文本块,获取所有逗号并将它们转换为相应的html实体。类似于htmlentities($var,ENTQUOTES)的功能,只是逗号

可能是我把问题复杂化了。我试图实现的是从用户处获取一个textarea值,该值可能包含逗号,从而搞乱以下代码:

$sql = "INSERT INTO blog (title, date, author, article, category) 
            VALUES (".$title.", ".$date.", ".$author.", ".$article.", ".$category.")";
把逗号放在那里会把查询搞砸。我想我可以想出其他方法来做插入。(我是n00b)。非常感谢您的帮助。提前谢谢

*编辑: 谢谢你的快速回复!代码自动受到注入攻击的保护(codeigniter框架)

错误消息如下:

发生数据库错误,错误号:1064

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在“测试桩”附近,2011年7月22日,1,”这是一个测试桩,所有 2号线有点酷

在博客中插入(标题、日期、作者、文章、类别)值(此 这是一个测试站,2011年7月22日,1,“这是一个各种各样的测试站 在这里输入一些很酷的东西,好像是一篇真实的文章 一切,但不是,是假的。终极的废话 重复:

,新闻)

我认为这是因为逗号,虽然我现在可以看出,如果它们在引号中,那就不重要了。我想我有一个不同的问题。谢谢你指出这一点

*编辑#2:
我在所有变量上都使用了codeigniter的$this->db->escape()。这不是我想的那样。很抱歉给你带来困惑,谢谢你的建议。sql注入链接已添加书签。

您必须转义要插入到sql查询中的任何字符串数据,并用引号将其括起来。简单地将
更改为
和#x2c
(或等效项)不会阻止引用等其他内容破坏查询。换言之,阅读一下

,您必须转义要插入到SQL查询中的任何字符串数据,并用引号将其括起来。简单地将
更改为
和#x2c
(或等效项)不会阻止引用等其他内容破坏查询。换句话说,去读一下关于神圣的SQL注入,蝙蝠侠

您需要清理输入,或使用参数化查询(请参阅PDO)。当有人输入标题为“DROP TABLE blog;”--时会发生什么情况


有一段阅读,你马上就会问到错误的问题。如果你使用参数化的查询,你就不需要逃避任何东西,你就可以消除攻击向量。

< P>神圣SQL注入,蝙蝠侠! 您需要清理输入,或使用参数化查询(请参阅PDO)。当有人输入标题为
”时会发生什么;下拉表博客--


读一读,就会立刻发现你问错了问题。如果使用参数化查询,则不需要逃避任何东西,并且可以消除攻击向量。

< P>可以通过函数< /P>删除逗号。 或向查询添加引号:

$sql = "INSERT INTO blog (title, date, author, article, category) 
            VALUES ('".$title."', '".$date."', '".$author."', '".$this->db->escape($article)."', '".$category."')";
但不要因为mysql注入而忘记使用函数来保护变量

$title = mysql_escape_string($title);

可以按函数删除逗号

或向查询添加引号:

$sql = "INSERT INTO blog (title, date, author, article, category) 
            VALUES ('".$title."', '".$date."', '".$author."', '".$this->db->escape($article)."', '".$category."')";
但不要因为mysql注入而忘记使用函数来保护变量

$title = mysql_escape_string($title);

请不要做你正在做的事!您将对SQL注入敞开大门。而是考虑使用,也许是使用。这里有一种方法,但一定要阅读文档:

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

$sql = "INSERT INTO blog (title, date, author, article, category) " .
       "VALUES (?, ?, ?, ?, ?)"

$stmt = $dbh->prepare();
$stmt->execute( array($title, $date, $author, $article, $category) );
有关SQL注入的更多信息,请参阅SQL注入神话和谬误以及。也看看他对这个问题的回答


我还提供了一个使用mysql API在PHP中进行SQL注入的示例。

请不要做您正在做的事情!您将对SQL注入敞开大门。而是考虑使用,也许是使用。这里有一种方法,但一定要阅读文档:

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

$sql = "INSERT INTO blog (title, date, author, article, category) " .
       "VALUES (?, ?, ?, ?, ?)"

$stmt = $dbh->prepare();
$stmt->execute( array($title, $date, $author, $article, $category) );
有关SQL注入的更多信息,请参阅SQL注入神话和谬误以及。也看看他对这个问题的回答


我还提供了一个使用mysql API在PHP中进行SQL注入的示例。

如果您使用CodeIgniter,您仍然必须确保您能够避开查询中出现的所有问题。 您必须在每个变量周围添加$this->db->escape():

$sql = "INSERT INTO blog (title, date, author, article, category) 
        VALUES (".$this->db->escape($title).", ".$this->db->escape($date).", ".$this->db->escape($author).", ".$this->db->escape($article).", ".$this->db->escape($category).")";
CodeIgniter在您使用时会自动逃逸。 您可以使用以下内容:

$data = array(
   'title' => $title,
   'date' => $date,
   'author' => $author,
   'article' => $article,
   'category' => $category
);

$this->db->insert('blog', $data); 

如果您使用的是CodeIgniter,那么您仍然必须确保避开查询中的所有内容。 您必须在每个变量周围添加$this->db->escape():

$sql = "INSERT INTO blog (title, date, author, article, category) 
        VALUES (".$this->db->escape($title).", ".$this->db->escape($date).", ".$this->db->escape($author).", ".$this->db->escape($article).", ".$this->db->escape($category).")";
CodeIgniter在您使用时会自动逃逸。 您可以使用以下内容:

$data = array(
   'title' => $title,
   'date' => $date,
   'author' => $author,
   'article' => $article,
   'category' => $category
);

$this->db->insert('blog', $data); 

逗号会给你带来这样的麻烦是没有意义的——你能给我们一个给你带来这个问题的
$article
的值吗?我不使用CodeIgniter,但我认为你的查询不会受到SQL注入的保护——至少不会以当前的格式。请看和--不要仅仅假设您的框架会保护您。逗号会给您带来这种麻烦是没有意义的--您能给我们一个给您带来这个问题的
$article
的值吗?我不使用代码点火器,但我认为您的查询不会受到SQL注入的保护——至少不会像当前的格式化方式那样。请看和--不要仅仅假设您的框架会保护您。好吧,非常清楚地说,如果底层机制是
mysql\u query
,他会没事的,因为
mysql\u query
不允许一次发送多个查询。当然,你是完全正确的。好吧,说得很清楚,如果底层机制是
mysql\u query
,他会没事的,因为
mysql\u query
不允许发送多个查询