我将htmlText
的{{1}}属性存储在数据库中。
我在另一个实例中检索它,我想向用户显示纯文本
第一行所以我让Flex使用像这样的函数来处理转换
RichTextEditor
然而,问题是此转换无法正确处理行。我把所有东西都放在一行!
让我们说从数据库得到的是这个
var editor:TextField = new TextField();
editor.htmlText = htmlTextFromDb;
var converted:String = editor.text;
只要我说<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">This is line one</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">This is line two</FONT></P></TEXTFORMAT>
,editor.htmlText就会变成
editor.htmlText = htmlTextFromDb
就好像没有新行一样。
我该如何解决这个问题?
答案 0 :(得分:1)
我会考虑这个HTML文本的服务器端转换。
但是在AS中,只有你可以通过拆分换行符然后将行转换为文本并在此连接之后逐行完成。有点难看,但应该有效。
var editor:TextField = new TextField();
var result:Array = new Array();
var input:Array = htmlTextFromDb.split(/\n/);
for each( var line:String in input) {
editor.htmlText = line;
result.push(editor.text);
}
var converted:String = result.join("\n");
击> <击> 撞击>
用正则表达式替换标签将是另一种方式。首先用换行符替换结束段落</P>
,然后删除所有剩余的标记。
var lnRegExp:RegExp = new RegExp("</P>", "g");
s = s.replace(lnRegExp, "\n");
var tagRegExp:RegExp = new RegExp("<([^>\\s]+)(\\s[^>]+)*>", "g");
trace(s.replace(tagRegExp, ""));