1

rte からコンテンツを読み取り、それらをサーバーに送信する前に、 一部のタイトル属性内の html エンティティを置き換える必要が<あります。>ここで得たのはテキスト表現だけなので、ここでは Dom-Operations を使用したくありません。私が探しているのは、これを変換する正規表現です

<div>ABCD<img style="max-height: 25px; max-width: 25px;" class="inlinetag" 
  src="http://my_images/icon.gif" 
  title="<ir_inline itemname=bild_1 type=0><cbd>"> EFG</div>

これに

<div>ABCD<img style="max-height: 25px; max-width: 25px;" class="inlinetag" 
  src="http://my_images/icon.gif" 
  title="&lt;inline itemname=bild_1 type=0&gt;&lt;cbd&gt;"> EFG</div>

これはどのように行うことができますか?

4

4 に答える 4

1

純粋な正規表現ソリューション:

var input = "title=\"<ir_inline itemname=bild_1 type=0><cbd>\""; //use the entire input
var myRegexp = /title=\"(.*?)\"/g; // get all title attributes
var output = input.replace(myRegexp,function(a){return a.replace(/</g,"&lt;").replace(/>/g,"&gt;");});

サンプルの入力と出力でテストしました。それはうまくいくはずです。

于 2013-01-28T10:26:08.297 に答える
1

いくつかのことを想定してみましょう.htmlタグと属性を持つプレーンテキストがあり、それをプレーンテキストのみとして扱いたいと考えています。おそらく、このテキストをサーバー側で取得しているためです。

正規表現以外で、ループを介した文字列操作を好む場合は、以下の単純なループ (ロジック) を使用して、目的を達成できます。

サーバー側で実行する必要があると想定したため、この目的で C# を使用しました。このループを実行するには、その理由で javascript を含む任意の言語を使用できます。

 string sourceText = "<div id=\"target\" ><div>ABCD<img style=\"max-height: 25px; max-width: 25px;\" class=\"inlinetag\" " +
                            "src=\"http://my_images/icon.gif\\" +
                            "title=\"<ir_inline itemname=bild_1 type=0><cbd>\"> EFG</div>" +
                        "</div>";
 string targetText = sourceText;
 bool traceOn = false;
 for (int i = 0; i < targetText.Length; i++)
 {
    if (traceOn)
       if (targetText[i] == '"')
            traceOn = false;

   if (traceOn)
   {
        if (targetText[i] == '<')
        {
             targetText = targetText.Remove(i, 1).Insert(i, "&lt;");
        }
        if (targetText[i] == '>')
        {
            targetText = targetText.Remove(i, 1).Insert(i, "&gt;");
        }
   }
   if (targetText[i] == '"')
   {
        if (targetText[i - 1] == '=')
          traceOn = true;
   }
}
        }

したがって、基本的に私が行っているのは、置換のパターンを操作することです。つまり、二重引用符内にあり、前に「=」が付いている < と > のみを置換する必要があります。それは完全に機能します。

これは完璧な解決策ではありませんが、文字列を処理する方法についてのアイデアが得られるはずです。ここにいる誰かが、さらに強力で柔軟なロジックを書くことができます。試してみてください/改善してください。

他の解決策は、あなたの文字列全体をxmlのように扱うことです。つまり、ほとんどすべてのサーバー側言語は、文字列を xml として処理するツールを提供しています。あなたのニーズに合ったものを見つけてください。

私は何かをすることができた

XmlDocument doc = new Xmldocument();
doc.LoadXml(targetString);

and then I could easily retrieve any tag and its attribute.

正規表現に関しては、私はそれらをとても恐れています。それはあなたにアイデアを与えるはずです。

于 2013-01-28T11:47:41.993 に答える
1

この JS 関数を試してください:

function title_replace() {
    var str = '<div>ABCD<img style="max-height: 25px; max-width: 25px;" class="inlinetag" \
  src="http://my_images/icon.gif" \
  title="<ir_inline itemname=bild_1 type=0><cbd>"> EFG</div>';
    var re = new RegExp(/title="(.|[\s\S])+?"/gm);
    var title = "";
    while (title_matches = re.exec(str)) {
        title = title_matches[0];
        var new_title = title.replace(/</gm,"&lt;").replace(/>/gm,"&gt;");
        str = str.replace(title, new_title);
    }
}

編集:

dom のすべての作業を削除しました。現在はすべて JS です。これがうまくいくかどうかを確認してください。

于 2013-01-28T09:46:43.933 に答える
0

サーバー側でアンチサミーを試してください。強力で安全です。

于 2013-01-28T09:23:21.563 に答える