我有一个个人资料页面,我想在其中显示大多数用户的数据库信息,以及一个表格,其中当前数据为具有修改权限的用户的默认值。
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
,它应该将撇号转换为'
,但它不起作用。其他方法如addslashes
和addcslashes
也不起作用。
显示的是我的表单输入及其应具有的值,直到应该有撇号的位置,它刚刚结束。 addslashes
执行相同的操作,在结束前使用/
。
最让我感到困惑的是,我的数据库中有一个带撇号的姓氏,这个显示得很好。
答案 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,以便在发布新数据时不会自动获得任何额外的斜杠。