提交POST前的转义撇号


Escape apostrophe before submit POST

我有一组从database加载的checkboxes。这些都是歌曲,所以有些歌曲中有撇号。当点击submitmethod=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 . "' />";
    }

我确实试着在谷歌上寻找答案,但找不到任何具体的问题。我想。

当获取文本字符串并将其插入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从来都不是一个很好的解决方案,只是把奇怪的字符在你的数据在这里)。

试试这个:

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