web-dev-qa-db-ja.com

Tinymceマクロがnbspを挿入しないようにする方法;?

Wp_editorビジュアルエディタで、選択範囲をショートコードでラップするように次のマクロボタンを定義しました。

(function() {
tinymce.create('tinymce.plugins.ingredient_name', {

    init : function(ed, url){
        ed.addButton('ingredient_name', {
        title : 'Tag ingredient',
        onclick : function() {
            var text=ed.selection.getContent({'format':'text'});
            ed.execCommand('mceInsertContent',false,'[ingredient_name]' + text + '[/ingredient_name]');
        },
            image: url + "/name.png"
        });
    }
});

tinymce.PluginManager.add('ingredient_name', tinymce.plugins.ingredient_name);

})();

このマクロは意図したとおりに機能しますが、生成されるショートコードの前にtinymceも挿入されています。だから、この結果の代わりに:

1 [ingredient_name]pound[/ingredient_name] salami

私はこれを得ます:

1 [ingredient_name]pound[/ingredient_name] salami

これはどういうわけかDBに挿入するときにどうしようもなく、そしてテンプレートにレンダリングされます、私は '1ポンドのサラミ'を取得します。元に戻って問題のあるものを削除することはできますが、最初はそのエンティティを挿入しないようにしてください。何か案は?

1
elleeott

それは、ちょっとしたmceの問題ではなく、むしろtinyMCEの出力をフィルタリングして間違った文字セットで解釈してから、ページに不要な文字を渡すphp DOMdocumentの問題ではないことが判明しました。

楽しいね!

1
elleeott

TinyMCE WYSIWYGエディタはデフォルトでスペースシンボルを エンティティに変換します。これは、デフォルトのentitiesプロパティがスペースシンボルを エンティティに変換するように設定されているために発生します。

entities: "160,nbsp,38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade,8240,permil,181,micro...."

この問題を解決するには、entities initプロパティを再定義する必要があります。例えば:

tinyMCE.init({
    entities: "38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade"
});

WordPressでTinyMCEオプションを初期化するには、tiny_mce_before_initフィルタに独自のフックを追加する必要があります。

function wpse8170_change_mce_options($initArray) {
    // other settings...
    $initArray['entities'] = '38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade'; 

    return $initArray;
}

add_filter('tiny_mce_before_init', 'wpse8170_change_mce_options');

調整可能な値の一覧は、 TinyMCE設定 ページで読むことができます。そして エンティティの最後のリンク オプション。

0
Eugene Manuilov