如何在使用撇号的输入中转义撇号
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
,这应该将撇号转换为 '
,但它不起作用。 addslashes
和 addcslashes
等其他方法也不起作用。
显示的是我的表单输入应该有的值,一直到应该有撇号的地方,就结束了。 addslashes
做同样的事情,在结束前有一个 /
。
最让我疑惑的是,我的数据库里有一个带撇号的姓氏,这个显示的很好。
请尝试像这样输出变量:
htmlspecialchars($user['Surname'], ENT_QUOTES);
另外请确保在您的系统中 disable magic quotes,这样您在发布新数据时就不会自动获得任何额外的斜杠。
htmlentities
默认只编码 "
双引号,因为它们是 HTML 属性更常见的终止符。如果你想让它也编码 '
单引号,你需要设置 ENT_QUOTES
标志:
htmlentities($foo, ENT_QUOTES | ENT_HTML401)
(ENT_HTML401
是另一个默认标志;现在您可能想使用 ENT_HTML5
。)
您实际上还应该用引号分隔您的属性!目前您的结果看起来像 value=James
,这并没有错,但是一旦您的值包含空格或者引号或其他特殊字符,就会给您带来麻烦。
我有一个个人资料页面,我想在其中显示来自数据库的大多数用户的信息,以及一个将当前数据作为具有修改权限的用户的默认值的表单。
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
做同样的事情,在结束前有一个 /
。
最让我疑惑的是,我的数据库里有一个带撇号的姓氏,这个显示的很好。
请尝试像这样输出变量:
htmlspecialchars($user['Surname'], ENT_QUOTES);
另外请确保在您的系统中 disable magic quotes,这样您在发布新数据时就不会自动获得任何额外的斜杠。
htmlentities
默认只编码 "
双引号,因为它们是 HTML 属性更常见的终止符。如果你想让它也编码 '
单引号,你需要设置 ENT_QUOTES
标志:
htmlentities($foo, ENT_QUOTES | ENT_HTML401)
(ENT_HTML401
是另一个默认标志;现在您可能想使用 ENT_HTML5
。)
您实际上还应该用引号分隔您的属性!目前您的结果看起来像 value=James
,这并没有错,但是一旦您的值包含空格或者引号或其他特殊字符,就会给您带来麻烦。