所以,我正在尝试使用htmlspecialchars()
来保护我的网站,但不幸的是我遇到了这段代码:
<?php
function wrap_nome($firstname, $lastname)
{
$join = htmlspecialchars($firstname, ENT_QUOTES) . ' ' . htmlspecialchars($lastname, ENT_QUOTES);
if (mb_strlen($join) > 32)
{
$text = substr($join,0,32);
return $text . " ...";
}
else
{
return $join;
}
}
$nome = wrap_nome($firstname, $lastname);
echo '<span style="color:#7F7F7F;font-family:Arial;font-size:13px;"><b>' . $nome . '</b></span>';
?>
最初,我认为问题可能是字符串$nome
有双引号和单引号,然后我删除了它们,发现htmlspecialchars($lastname, ENT_QUOTES)
继续被回显,htmlspecialchars($firstname, ENT_QUOTES)
继续给我一个空字符串!
如果我这样做:
echo '<span style="color:#7F7F7F;font-family:Arial;font-size:13px;"><b>' . htmlspecialchars($nome, ENT_QUOTES) . '</b></span>';
......它不输出任何东西。
是什么导致了这个?
答案 0 :(得分:1)
htmlspecialchars
如果收到错误则返回FALSE
,如果$nome
包含无法在指定字符集中表示的任何字符,则会发生错误。在PHP 5.4之前,字符集默认为ISO8859-1
,UTF-8
从那时起,尝试使用htmlspecialchars($nome, ENT_QUOTES, 'iso8859-1')
。
如果这不起作用,请参阅documentation中的字符集列表,并使用适当的字符集作为您的姓名。
答案 1 :(得分:0)
简单地替换
htmlspecialchars($str,ENT_QUOTES );
带
htmlentities($st ,ENT_QUOTES ,"UTF-8");