我使用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的任何记录都没有打印出来,其他所有记录都打印出来好吗?
现在,如果我尝试使用完全相同的字符串,而不是从数据库中提取它,那么显示它可以吗?
任何人都可以用简单的语言向我解释如何解决这个问题。
欢呼声
答案 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作为一个很好的例子:
default_charset
设置为UTF-8
。或者,您可以使用像mb_convert_encoding
这样的函数来转换字符串,这些字符串编码是浏览器所期望的,PHP假设的,以及MySQL用来存储和提供文本的。