繁体   English   中英

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

[英]How to escape apostrophe inside an input made with apostrophes

我有一个配置文件页面,在该页面中,我想为大多数用户显示来自数据库的信息,以及一个表单,其中具有当前数据作为具有修改权限的用户的默认值。

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; htmlentities ,但无效。 像其他的方法addslashesaddcslashes都不能工作。

显示的是我的表单输入及其应具有的值,直到应该有撇号的地方,它才结束。 addslashes作用相同,在末尾加/

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

htmlentities默认只编码"双引号,因为这些都是比较常见的终止对于HTML属性,如果你想让它编码。 '单引号也一样,你需要设置ENT_QUOTES标志:

htmlentities($foo, ENT_QUOTES | ENT_HTML401)

ENT_HTML401是另一个默认标志;这些天,您可能希望改为使用ENT_HTML5 。)

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

请尝试像这样输出变量:

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

另外,请确保在系统中禁用魔术引号 ,以免在发布新数据时自动出现任何多余的斜杠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM