htmlentities() returns 与数组一起使用时为空字符串
htmlentities() returns empty string when used with an array
当我使用 htmlentities()
来编码一个变量时,它就像一个魅力,但如果我对一个数组做同样的事情,它只是 returns 一个空数组。我尝试使用 array_map()
但这是同一个故事。我尝试将编码切换为 ISO-8859-1
和 UTF-8
但没有成功。它不想工作。
代码如下:
<html>
<head>
<title>Signup</title>
</head>
<body>
<form name="signup" method="POST" action="form.php">
<fieldset>
<legend><p style="color:red; font-size:16px">Sports</p></legend>
<ul>
<li>
<input type="checkbox" name="sports[]" value="soccer">
<label for="soccer">Soccer</label>
</li>
<li>
<input type="checkbox" name="sports[]" value="water_polo">
<label for="water_polo">Water polo</label>
</li>
<li>
<input type="checkbox" name="sports[]" value="tennis">
<label for="tennis">Tennis</label>
</li>
<li>
<input type="checkbox" name="sports[]" value="volleyball">
<label for="volleyball">Volleyball</label>
</li>
</ul>
</fieldset>
</form>
<?php
$sports = htmlentities($_POST["sports"], ENT_COMPAT, 'ISO-8859-15');
$count = count($sports);
if($count == 0) {
echo "You don't play any sports.<br>";
} else {
echo "You like playing: ";
foreach($sports as $s) {
if(--$count == 0) {
echo "<span style='color:red'>$s</span>.<br>";
break;
} else {
echo "<span style='color:red'>$s</span>, ";
}
}
}
?>
</body>
</html>
它产生以下输出:
你不参加任何运动。
意思是 htmlentities() 无法对我的数组进行编码。
我不确定您是如何尝试使用 array_map
,但以下是一种正确的方法:
function sanitize($arg) {
if (is_array($arg)) {
return array_map('sanitize', $arg);
}
return htmlentities($arg, ENT_QUOTES, 'UTF-8');
}
$array = array_map('sanitize', $_POST);
这使用递归,因此它也适用于多维数组。
当我使用 htmlentities()
来编码一个变量时,它就像一个魅力,但如果我对一个数组做同样的事情,它只是 returns 一个空数组。我尝试使用 array_map()
但这是同一个故事。我尝试将编码切换为 ISO-8859-1
和 UTF-8
但没有成功。它不想工作。
代码如下:
<html>
<head>
<title>Signup</title>
</head>
<body>
<form name="signup" method="POST" action="form.php">
<fieldset>
<legend><p style="color:red; font-size:16px">Sports</p></legend>
<ul>
<li>
<input type="checkbox" name="sports[]" value="soccer">
<label for="soccer">Soccer</label>
</li>
<li>
<input type="checkbox" name="sports[]" value="water_polo">
<label for="water_polo">Water polo</label>
</li>
<li>
<input type="checkbox" name="sports[]" value="tennis">
<label for="tennis">Tennis</label>
</li>
<li>
<input type="checkbox" name="sports[]" value="volleyball">
<label for="volleyball">Volleyball</label>
</li>
</ul>
</fieldset>
</form>
<?php
$sports = htmlentities($_POST["sports"], ENT_COMPAT, 'ISO-8859-15');
$count = count($sports);
if($count == 0) {
echo "You don't play any sports.<br>";
} else {
echo "You like playing: ";
foreach($sports as $s) {
if(--$count == 0) {
echo "<span style='color:red'>$s</span>.<br>";
break;
} else {
echo "<span style='color:red'>$s</span>, ";
}
}
}
?>
</body>
</html>
它产生以下输出:
你不参加任何运动。
意思是 htmlentities() 无法对我的数组进行编码。
我不确定您是如何尝试使用 array_map
,但以下是一种正确的方法:
function sanitize($arg) {
if (is_array($arg)) {
return array_map('sanitize', $arg);
}
return htmlentities($arg, ENT_QUOTES, 'UTF-8');
}
$array = array_map('sanitize', $_POST);
这使用递归,因此它也适用于多维数组。