我正在开发基于网络的文本文件编辑器 它可以用来编辑html,css,javascript和php脚本 原始的HTML。
为了让原始html显示在textarea字段中进行编辑,我必须转义关闭textarea标签:
<\/textarea>
。
这意味着当php打开并读取文件以放置在主机textarea标签集中时它会
str_replace('</text', '<\/text', $filestring);
因此,当编辑文件并准备保存时,我需要更换转义
(将<\/text
更改回</text
)
但是,可能存在调用document.write
时出现javascript字符串的情况
关闭标签都需要在字符串内保持转义。
所以我试图在javascript和/或php中定期表达,以检测两者的情况 引用和不引用的关闭textarea标签 由于字符串将是多行的,我需要检测报价集 可能跨越多条线。
到目前为止:
File: js/runner.js
0 |/*
1 |new file created by lab_0 script on Saturday 12th of April 2014 05:23:51 PM
2 |*/
3 |
4 |function runner()
5 | {
6 | this.run = function()
7 | {
8 | var txt = ' "<\/textarEa>" kjhgy <\/teXtarea> ';
9 | var pat = /.*[^'|"].*(<\/teXtarea>).*[^"|'].*/ig
10| var match = pat.exec(txt);
11| return 'match: '+match[1]+' -- '+txt.replace(match[1], '');
12| }
13| }
14|
这将找到并替换X int teXtarea但是如果这样做:
var txt = ' "<\/textarEa>" kjhgy <\/teXtarea> "<\/Textarea>" ';
它将匹配<\/Textarea>
的最后一个实例。
此外,由于测试结果被写回浏览器,它似乎正在删除
逃脱(\)
这是将调用结果写入Obj.runner.run;
的代码case 'runner': // switch on e.target.id
var ret = JSrun.run(); // runner instantiated as JSrun
var put = document.getElementById('run');
var res = document.createTextNode('JS Run result: '+ret);
if(!put.hasChildNodes())
{
put.appendChild(res);
}
else
{
put.childNodes[0].data = 'JS Run result: '+ret;
}
break;
因此,结果在浏览器源中不可见,以查看转义是否仍然存在。