在提交POST之前逃避撇号

时间:2015-10-11 10:08:49

标签: php

我有一组checkboxesdatabase加载。这些都是歌曲,所以有些歌曲中有撇号。用submit点击method=post后,所有内容都会在下一页上发布,但带撇号的歌曲不完整。它在撇号之前就已经破裂了。

例如:Can't Breathe变为Can

PHP:

if(isset($_POST['submit'])){

if(isset($_POST['chk_album'])){
  foreach($_POST['chk_album'] as $key=>$val){
   echo $val; 
  }
}
}

HTML:

<input type="checkbox" name="chk_album[]" data-album="echo" value="Can't Breathe">

SQL:

$dbQuery = "SELECT * FROM $album";
$dbResult = mysqli_query($dbCon, $dbQuery) or die("Error");

while ($row = mysqli_fetch_assoc($dbResult)) {
    $id = $row["Id"];
    $title = addslashes($row["Title"]);
    $album = $row["Album"];
echo "<input type='checkbox' name='chk_album[]' value='" . $title . "' />";

    }

我确实尝试在Google上寻找答案,但找不到任何针对我问题的内容。我想。

2 个答案:

答案 0 :(得分:2)

当获取文本字符串并将其插入HTML文档时,请使用htmlspecialchars()使其安全并转换具有特殊含义的字符。

PHP假定您将使用"分隔属性值,因此默认情况下不会转换'。你可以通过传递额外的旗帜来解决这个问题。

$html = htmlspecialchars($text, ENT_QUOTES);

因此:

$html_title = htmlspecialchars($title, ENT_QUOTES);
echo "<input type='checkbox' name='chk_album[]' value='" . $html_title . "' />";

(并删除$title = addslashes($row["Title"]);,因为addslashes对任何事情来说都不是一个好的解决方案,只是在这里将奇怪的字符放入数据中。)

答案 1 :(得分:-1)

试试这个:

<input type="checkbox" name="chk_album[]" data-album="echo" value="Can\'t Breathe">