2012-09-18 10 views
5

htmlエンコードされた方法で出力しようとしている文字列があり、htmlentities() functionは常に空の文字列を返します。htmlentitiesでPHP 5.4の新しい定数ENT_DISALLOWEDを使用

私はそれがそうする理由を正確に知っています。さて、私はPHP 5.4を実行していません。最新のPHP 5.3フレーバーがインストールされています。

質問は、どのように無効なコードユニットシーケンスを持つ文字列をhtmlencodeすることができるのかということです。

マニュアルによれば、ENT_SUBSTITUTEが行く方法です。しかし、この定数はPHP 5.3.Xでは定義されていません。運まだ

if (!defined('ENT_SUBSTITUTE')) { 
    define('ENT_SUBSTITUTE', 8); 
} 

私はこれをしなかったん。 htmlentitiesはまだ空の文字列を返しています。

代わりにENT_DISALLOWEDを試してみましたが、対応する長い値が見つかりませんでした。

だから私の質問は、PHP 5.4のENT_DISALLOWEDの定数値は、どのような二つが

  1. を折らうか?

  2. UTF-8以外の文字を含む文字列(smart quotesなど)をクリアするにはどうすればよいですか? - 賢い引用だけでなく、htmlentities()が空文字列を返す原因となるもの。あなたが言うように

答えて

2

、これらの定数5.4.0were added。事は、サポートは5.4.0にも新しいです。あなたが望むあらゆる値を渡すことができるという意味で、より古い年齢のhtmlentitiesはそれを理解しません。

ほとんどの場合そうですが、phpの変更ログはかなり誤解を招くことがあります。

3

PHP 5.3のhtmlentities()にはENT_SUBSTITUTEフラグがありませんが、(実際には示唆されていない)ENT_IGNOREフラグがあります。メモを取って、使用前に理解してください。

このフラグを使用するのは、» may have security implicationsとしてください。

最初に入力文字列に問題がある理由を理解することははるかに優れています。多くの場合、正しいエンコーディングを指定するために、ユーザーは紛失します。

など。最初に文字列をUTF-8に再エンコードし、htmlspecialchars()またはhtmlentities()に渡します。スマート引用符について言えば、Windows-1252でエンコードされた文字列を使用している可能性があります。あなたも、使用前に1つを変換する必要はありません、あなただけ適切に(PHP 5.3)文字セットを指定することができます。

htmlentities($string, ENT_QUOTES, $encoding = 'Windows-1252'); 

当然これだけかの入力$stringがWindows-1252でエンコードされた作品(CP1252)。最初に正しいエンコーディングを見つけたら、通常は問題ありません。サポートされていないエンコーディングはiconv又はmb_stringと、例えば、第一支持された1つにエンコードし直すため。

+0

彼らはLynda.com MYSQLエッセンシャルトレーニングを以下とSid.phpでライン600上のエラー「未定義の定数ENT_SUBSTITUTEの使用」に走っているので、誰もこれを探していることが発生した場合、私はここで読むものに基づいて、あなたを教えてくれますそして、私はPHP 5.3のための明確な同等のフラグを見つけることができなかったことを、私は先に行って、そのフラグを削除し、アプリは現在正常に動作します。そこ@hakreが述べたようにセキュリティ上の影響がありますが、私は、Webへのアクセスなしでローカルの開発サーバー上で働いています。 –

関連する問題