【问题标题】:How to escape apostrophe inside an input made with apostrophes如何在用撇号制作的输入中转义撇号
【发布时间】:2016-05-24 11:14:37
【问题描述】:

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

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,它应该将撇号转换为&amp;#39;,但它不起作用。 addslashesaddcslashes 等其他方法也不起作用。

显示的是我的表单输入以及它应该具有的值,直到应该有撇号的地方,它刚刚结束。 addslashes 做同样的事情,在结尾前加上 /

最让我不解的是,我的数据库里有一个带撇号的姓氏,而这个显示得很好。

【问题讨论】:

  • 您能举出正确显示和不正确显示的示例用户吗?您能否发布一个示例,说明它应该是什么样子以及它做错了什么?

标签: php mysql string apostrophe


【解决方案1】:

htmlentities 默认只编码" 双引号,因为它们是更常见的 HTML 属性终止符。如果你想让它也编码'单引号,你需要设置ENT_QUOTES标志:

htmlentities($foo, ENT_QUOTES | ENT_HTML401)

ENT_HTML401 是另一个默认标志;这些天您可能想改用ENT_HTML5。)

实际上你还应该用引号来界定你的属性!目前,您的结果看起来像 value=James,这不是错误的,但是一旦您的值包含空格或引号或其他特殊字符,就会给您带来麻烦。

【讨论】:

    【解决方案2】:

    请尝试像这样输出变量:

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

    还要确保在您的系统中disable magic quotes,这样您在发布新数据时就不会自动获得任何额外的斜线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2015-05-29
      • 2018-08-26
      • 1970-01-01
      相关资源
      最近更新 更多