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


htmlspecialchars() is causing a variable to return blank data?

我正在使用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的记录都不输出任何内容,所有其他记录都输出好吗?

现在,如果我尝试完全相同的来一个字符串,不是从数据库中拉它显示它OK?

从您链接的网站来看,很明显页面本身使用UTF-8进行字符编码(<meta charset="UTF-8">)。似乎从您获取数据的数据库使用的字符编码不等于ini_get("default_charset")值。如果编码错误,htmlspecialchars将返回空字符串,这就是您在这里看到的。

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

  • 告诉浏览器你正在使用UTF-8。你已经用meta标签这样做了,所以这很好。
  • 告诉PHP你正在使用UTF-8。确保php.ini设置default_charsetUTF-8
  • 告诉MySQL你正在使用UTF-8。确保数据库中的表使用UTF-8作为编码-edit-或者告诉MySQL接口使用UTF-8

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