4

自从上次在我的 Debian 机器上更新PHP5 5.4.0-3以来,我注意到一些页面有空字段,其中应该是来自 MySQL 数据库的文本。

我玩了一下,发现了问题。

<?php
$scselect = mysql_query("SELECT `name` FROM `forum_threads` WHERE `forum` = '1' ORDER BY `timestamp` DESC") or exit((mysql_error()));
    while ($scrow=mysql_fetch_array($scselect))
    {
        var_dump($scrow['name']);
        var_dump(htmlentities($scrow['name']));
    }
?>

奇怪的是,这是打印的内容:

string(18) "php hu3: the Forum"
string(0) ""
string(18) "php hu2 score-rule"
string(0) ""
string(6) "php hu"
string(0) ""
string(15) "HU 8: Binarycnt"
string(0) ""

但是如果我使用带有硬编码内容的 htmlentities -> htmlentities("test"); 它就像魅力一样。另外,如果我这样做:

var_dump("a".$scrow['name']);

它还说

string(0) ""

但它变得陌生。如果我将 htmlentities 或 htmlspecialchars 与数据库中的任何其他变量一起使用,它就可以完美地工作。

var_dump(htmlspecialchars($scrow['ID'])); // prints for example string(2) "87"

这可能是什么原因?

4

3 回答 3

3

试试这个 :

htmlentities($scrow['name'], ENT_QUOTES | ENT_IGNORE, "UTF-8");
于 2012-04-07T12:37:18.400 回答
2

推荐的方法是在每次使用 htmlentities 时对字符集进行硬编码。

这是 htmlentities 调用的一个特性,不受默认字符集的影响。 迁移54

于 2012-12-19T10:01:27.617 回答
1

造成这种情况的原因可能是从数据库返回的另一种编码(如 UTF8)

所以玩一点utf8_encode($string)utf8_decode($string)

另一种方法是使用 htmlentities 的 encoding 参数:

http://de2.php.net/htmlentities

于 2012-04-07T12:43:37.063 回答