【问题标题】:htmlspecialchars() is causing a variable to return blank data?htmlspecialchars() 导致变量返回空白数据?
【发布时间】:2016-10-04 12:06:14
【问题描述】:

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

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

【问题讨论】:

  • 当然,您可以提供生成的 HTML 文件的相关部分。
  • 是的,抱歉,已经修改了帖子并包含了指向该网站的链接。谢谢

标签: php html-entities html-encode htmlspecialchars


【解决方案1】:

从您链接的网站可以看出,该页面本身使用 UTF-8 进行字符编码(&lt;meta charset="UTF-8"&gt;)。您从中获取数据的数据库似乎使用了不等于 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 用于存储和提供文本的不同字符编码之间转换字符串。

【讨论】:

  • 感谢您的详细回复,我了解现在的情况。正如你所说,我已经告诉浏览器使用 UTF-8 现在我添加了以下内容以查看 php 的默认字符集是什么: echo ini_get("default_charset");并且返回 UTF-8,所以现在它只是归结为数据库本身。我无法检查。我正在等待我的主人回复我,看看当前的字符集是什么
  • 好的,我刚刚使用 var_dump($conn->get_charset()); 检查了我的 sql 字符集。并返回 object(stdClass)#2 (8) { ["charset"]=> string(6) "latin1" ["collat​​ion"]=> string(17) "latin1_swedish_ci" ["dir"]=> string( 0) "" ["min_length"]=> int(1) ["max_length"]=> int(1) ["number"]=> int(8) ["state"]=> int(1) [" comment"]=> string(0) "" } 这表明 mysql 字符集是 latin1_swedish_ci 所以这显然是这里的问题。目前正在尝试为 mysql 设置一个新的字符集
  • 查询信息架构,如in this answer解释。
  • 已排序!!!添加了以下行 mysqli_set_charset($conn,"utf8");现在所有 3 都设置为 UTF-8 非常感谢!!!!!!
猜你喜欢
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2014-02-23
  • 1970-01-01
相关资源
最近更新 更多