我从rte中读取内容,然后在将它们提交给服务器之前,我需要将<
和>
替换为某些title属性中的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="<inline itemname=bild_1 type=0><cbd>"> EFG</div>
如何做到这一点?
答案 0 :(得分: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,"<").replace(/>/gm,">");
str = str.replace(title, new_title);
}
}
修改强>
我已经删除了所有关于dom的工作,现在已经删除了所有JS。看看这是否适合你。
答案 1 :(得分: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,"<").replace(/>/g,">");});
我用你的样本输入和输出测试了它。它应该工作。
答案 2 :(得分: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, "<");
}
if (targetText[i] == '>')
{
targetText = targetText.Remove(i, 1).Insert(i, ">");
}
}
if (targetText[i] == '"')
{
if (targetText[i - 1] == '=')
traceOn = true;
}
}
}
所以基本上我正在做的是操纵替换模式,即 你只需要替换那些&lt;和&gt;它出现在双引号内,前面还有'='。它运作得很好。
这不是一个完美的解决方案,但它应该给你和Idea,你如何处理你的字符串。这里有人可以编写更强大,更灵活的逻辑。尝试/改进它。
其他解决方案可以是像xml一样处理你的整个字符串。即 几乎所有服务器端语言都提供了将字符串作为xml处理的工具。找到适合你需要的那个,即
我本可以做类似
的事情XmlDocument doc = new Xmldocument();
doc.LoadXml(targetString);
and then I could easily retrieve any tag and its attribute.
对于正则表达式,我很害怕他们。
它应该给你一个想法。
答案 3 :(得分:0)
在服务器端尝试antisamy。它功能强大且安全。