htmlspecialchars()导致变量返回空白数据?

时间:2016-10-04 12:06:14

标签: mysqli html-entities html-encode htmlspecialchars

我使用mysqli和php从数据库中提取数据。

这可以正常但我得到一个随机字符(黑色问号)替换单词中的撇号,所以我想我可以使用htmlspecialchars()函数让它们正确显示,但它不起作用:(

所以我的代码看起来像这样

while($row = $result->fetch_assoc())
{
    $desc = htmlspecialchars($row['description'], ENT_QUOTES);?>

    <div class="timeline-key">
        <div class="fluid key-content">
            <p><?php echo $desc?></p>
        </div>
    </div><?php
}

现在数据库中包含撇号$ desc的任何记录都没有打印出来,其他所有记录都打印出来好吗?

现在,如果我尝试使用完全相同的字符串,而不是从数据库中提取它,那么显示它可以吗?

任何人都可以用简单的语言向我解释如何解决这个问题。

欢呼声

1 个答案:

答案 0 :(得分:2)

从您链接的网站,很明显该网页本身使用UTF-8进行字符编码(<meta charset="UTF-8">)。您从中获取数据的数据库似乎使用的字符编码不等于ini_get("default_charset")值。 If you get the encoding wrong, htmlspecialchars will return the empty string,这是你在这里看到的。

解决方案是在(或明确说明)您正在使用的字符编码方面保持一致。当您对所有内容使用一个字符编码时,这会简单得多。让我们使用UTF-8作为一个很好的例子:

  • 告诉浏览器您使用的是UTF-8。您已经使用元标记执行此操作,因此非常好。
  • Tell PHP you're using UTF-8确保php.ini将default_charset设置为UTF-8
  • Tell MySQL you're using UTF-8确保数据库中的表使用UTF-8作为其编码 -edit-或告诉MySQL接口使用UTF-8。

或者,您可以使用像mb_convert_encoding这样的函数来转换字符串,这些字符串编码是浏览器所期望的,PHP假设的,以及MySQL用来存储和提供文本的。