htmlentities和htmlspecialchars拒绝处理字符串

时间:2012-04-07 12:31:48

标签: php mysql row html-entities htmlspecialchars

自从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 - &gt;ヶ辆( “测试”);它就像魅力一样。 如果我这样做:

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

它也说

string(0) ""

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

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

这可能是什么原因?

3 个答案:

答案 0 :(得分:3)

试试这个:

htmlentities($scrow['name'], ENT_QUOTES | ENT_IGNORE, "UTF-8");

答案 1 :(得分:2)

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

这是htmlentities调用的一项功能,不受默认字符集的影响。 migration54

答案 2 :(得分:1)

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

所以请与utf8_encode($string)utf8_decode($string)

一起玩

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

http://de2.php.net/htmlentities