PHP MySQLi逃脱报价

时间:2015-01-05 03:29:02

标签: php mysql mysqli

我使用php / mysqli阅读评论,但表中的各种评论都有单引号或双引号。

我将评论存储在数据属性中。使用chrome控制台,我可以看到引号在哪里抛出整个代码。

 <?php
   echo "<td><a href='' class='comment' data-toggle='modal' data-comment='".htmlentities($row[comment])."'>" . $row[partner_name] . "</a></td>";
 ?>

正如您在上面的代码中看到的,我尝试使用htmlentities。我也尝试过addlashes和两者的结合。

无论哪种方式,由于mysql表中的引用,我仍然无法正确显示注释。

我可以使用另一个PHP函数来解决这个问题吗?

请告诉我。enter image description here

正上方是Chrome控制台的屏幕截图。在POTENTIAL 53之后,有一个引用我的代码的单引号。当它应该是评论的一部分时,所有其他橙色文本都被读作HTML。

必须有一种方法来读取单引号作为字符串的一部分。

请告知。

3 个答案:

答案 0 :(得分:2)

嗯,有两个问题:

  1. 你必须编码东西,特别是引号:

    $text = htmlentities($value, ENT_QUOTES);
    
  2. title属性不适用于换行符,因此您必须处理此问题。这样的事情应该可以胜任:

    $text = preg_replace('/\r?\n/', '#xA;', $text);
    

答案 1 :(得分:1)

将标志ENT_QUOTES传递给你的htmlentities函数。见http://php.net/htmlentities。这将用引号引用替换引号,并防止它突破数据注释属性。

答案 2 :(得分:0)

尝试转义数据中的引号。这会影响到:

$pattern = "/\"|\'/";
$replace = '\\\"';
$subject = $row[comment];
$rowComment = preg_filter($pattern, $replace, $subject);

*提示 - 您也可以在存储之前过滤数据。

描述:echo $ rowComment将生成一个包含所有引号转义的字符串;