2016-10-04 103 views
1

我使用mysqli和php从数据库中提取数据。htmlspecialchars()是否导致变量返回空白数据?

这一工程确定,但我得到一个随机字符(黑色问号)的话替换撇号,所以我想我可以使用用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 
} 

目前数据库中的所有记录,其包含一个单引号$递减打印出什么,所有其他记录打印出来好吗?

现在,如果我尝试完全相同的到来在一个不被拉的fr字符串上om数据库显示它可以吗?

任何人都可以简单地向我解释我该如何解决这个问题。

欢呼

+0

当然,您可以提供生成的HTML文件的相关部分。 – 2016-10-04 13:42:49

+0

是的,对不起,修改了帖子,也包含了一个链接到网站。谢谢 – BBLJ84

回答

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。你已经用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用来存储和提供文本。

+0

感谢您的详细回复,我明白现在发生了什么。正如你所说我已经告诉浏览器使用UTF-8现在我已经添加了以下内容来查看PHP的默认字符集是什么:echo ini_get(“default_charset”);并且返回UTF-8,所以现在它只是返回到数据库本身。我无法检查。我正在等待我的主机回到我看看目前的字符集是什么 – BBLJ84

+1

好吧我刚刚检查了我的SQL字符集使用var_dump($ conn-> get_charset());并返回对象(stdClass)#2(8){[“字符集”] =>字符串(6)“latin1”[“collat​​ion”] =>字符串(17)“latin1_swedish_ci”[“dir”] =>字符串( 0)“”[“min_length”] => int(1)[“max_length”] => int(1)[“number”] => int(8)[“state”] => int(1)[“评论“] =>字符串(0)”“}这表明mysql字符集是latin1_swedish_ci,所以这显然是问题在这里。正在尝试为mysql设置一个新的字符集 – BBLJ84

+0

查询信息模式,正如[本答案](/ a/1049958/824425)中所述。 – 2016-10-04 15:09:45