[英]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
,它将撇号转换为'
htmlentities
,但无效。 像其他的方法addslashes
和addcslashes
都不能工作。
显示的是我的表单输入及其应具有的值,直到应该有撇号的地方,它才结束。 addslashes
作用相同,在末尾加/
。
最让我困惑的是,我的数据库中有一个姓氏带有撇号的姓氏,而且显示得很好。
htmlentities
默认只编码"
双引号,因为这些都是比较常见的终止对于HTML属性,如果你想让它编码。 '
单引号也一样,你需要设置ENT_QUOTES
标志:
htmlentities($foo, ENT_QUOTES | ENT_HTML401)
( ENT_HTML401
是另一个默认标志;这些天,您可能希望改为使用ENT_HTML5
。)
您实际上还应该用引号分隔属性! 当前,您的结果看起来像value=James
,这是不正确的,但是一旦您的值包含空格或引号或其他特殊字符,就会使您陷入麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.