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

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 的任何记录都不会打印任何内容,所有其他记录都可以打印出来吗?

现在,如果我尝试对未从数据库中提取的字符串进行完全相同的操作,它会显示它好吗?

从您链接的网站可以看出,该页面本身使用 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。您已经使用 meta 标记这样做了,这很好。
  • 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 使用的不同字符编码之间转换字符串存储和提供文本。