2

特に数値エンコードの場合、ユーザーが入力したデータをutf-8にエンコードする必要があるため、エンコードに次のコードスニペットを使用してデータベースに保存することにしました

$convmap = 配列 ( 0x80, 0xffff, 0, 0xffff );
$str = htmlentities ( mb_encode_numericentity( $str, $convmap, 'UTF-8' ),ENT_QUOTES,"UTF-8",false );

しかし、Yii のデフォルトのエンコードは、htmlspecialchars() 関数のみを使用する CHtml::encode() のみを使用します。

そこで、encode 関数をオーバーライドするために CHtml クラスを拡張することにしましたが、Yii でそれを行う方法がわかりません。Yii ヘルパー クラスを拡張する良い方法を提案してください...

4

2 に答える 2

1

完全に行うことはできません。このクラスはフレームワークに緊密に統合されています。(つまり、ウィジェット、activaeformなどで使用されます...)、

できることの1つは、それを拡張してクラスを作成し、アプリケーション全体で使用することです。モデルデータをビュー/ウィジェットに送信する前に前処理します。

于 2012-09-29T12:58:12.567 に答える
1

で CHtml クラス自体をいつでも編集し/framework/web/helpers/CHtml.phpて、encode メソッドに追加のパラメーターを追加できますか? 例えば;

public static function encode($text,$extraEncode=false)
{
    if($extraEncode===true)
    {
        $convmap = array ( 0x80, 0xffff, 0, 0xffff );
        return htmlentities ( mb_encode_numericentity( $text, $convmap, 'UTF-8' ),ENT_QUOTES,"UTF-8",false );
    } else {
        return htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);
    }
}

明らかに、好みに合わせて編集してください。

次に、次のように呼び出すことができますCHtml::encode($myString,true)

于 2012-09-29T14:19:11.630 に答える