如何在使用撇号的输入中转义撇号

时间:2016-04-13 07:28:16

标签: php mysql string apostrophe

我有一个个人资料页面,我想在其中显示大多数用户的数据库信息,以及一个表格,其中当前数据为具有修改权限的用户的默认值。

if ($IDprofile == $_SESSION['userID'])
{
    echo "<form method='post'>
            Surname: <input type='text' required name='surname' maxlength=50 
                value=".htmlentities($user['Surname'])."><br>
            Name: <input type='text' required name='name' maxlength=50 
                value=".htmlentities($user['Name'])."><br>

        Birthdate (format YYYY-MM-DD): <input type='text' required name='BirthDate' value='";
        if ($user['BirthDate'] != null)
            echo $user['BirthDate'];
        else
            echo "-";
        echo "'><br>

        Description: <input type='text' maxlength=255 name='description'                                 value='";
        if ($user['Description'] != null)
            echo htmlentities($user['Description']);
        else
            echo "-";
        echo "'><br>
        <input type='submit' value='OK'></form>";
}

正如您所看到的,我尝试使用htmlentities,它应该将撇号转换为&#39;,但它不起作用。其他方法如addslashesaddcslashes也不起作用。

显示的是我的表单输入及其应具有的值,直到应该有撇号的位置,它刚刚结束。 addslashes执行相同的操作,在结束前使用/

最让我感到困惑的是,我的数据库中有一个带撇号的姓氏,这个显示得很好。

2 个答案:

答案 0 :(得分:4)

默认情况下,

htmlentities仅编码"双引号,因为这些是HTML属性的更常见终结符。如果您希望它也编码'单引号,则需要设置ENT_QUOTES标记:

htmlentities($foo, ENT_QUOTES | ENT_HTML401)

ENT_HTML401是另一个默认标记;现在您可能想要使用ENT_HTML5。)

您还应该使用引号实际划分属性!目前您的结果看起来像value=James,这不是不正确的,但是一旦您的值包含空格或者引号或其他特殊字符,就会让您遇到麻烦。

答案 1 :(得分:1)

请尝试输出这样的变量:

htmlspecialchars($user['Surname'], ENT_QUOTES);

还要确保系统中disable magic quotes,以便在发布新数据时不会自动获得任何额外的斜杠。