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 のエンコーディング引数をいじることです。

http://de2.php.net/htmlentities

于 2012-04-07T12:43:37.063 に答える