`

项目小经验: eval与回车符

阅读更多

      今天遇到一个让我一开始无从下手的问题, 页面form中有一个名为备注的textarea, 这里边可以有换行,也就有了回车符.这个form提交到DB后再以ajax的方式从DB中取出备注的信息, 在jsp页面中用javascript里的eval转换成JavaScript的对象时出问题了,那个回车符在eval里捣乱了!


    怎么办? 不让用户在备注里换行就没有了回车符,但业务要求应该可以换行的.

    首先想到了encode,但怎么与javascript里的eval整合? 对这个encode究竟怎么用也不熟悉.


    也想到了javascript里的escape/unescape,但这个escape是把那些特殊符号换成"%"形式的值? 就是换成了在eval里又会不会给eval有影响?试了试, 出错了, 也不知道为什么没有报错信息,是因为在ajax的回调函数里执行的原因? 但这也不应该对eval或escape的执行有影响的.


    是不是eval的过? 想到了json里的JSON.parse()方法,那样的话得引入一个json框架,仅仅为了这么点小事,有些过了吧?顺便也记下来,看http: //www.json.org/js.html里的描述时,有这么一句话:var myObject = eval('(' + myJSONtext + ')'); 这个eval什么时候加" '(' ",什么时候又不用加? 以前的项目中都加的,而现在项目又不加了, 这加与不加有什么本质的区别?

    ..................

    后来边搜边试,想用很笨的方法, 把ajax返回的字符串在eval前把里面的回车符("\r\n" 或"\n")替换成一个特殊的字符--比如说@, 再在真正赋值时再把这个替换来的@换成"\r\n"或"\n". (顺便再问下"\r\n"与"\n"有什么区别? 隐约记得"\r\n"是Unix下的换行而"\r\n"是windows下的换行,真的是这样吗? http://javaeye-mao.iteye.com/blog/211354里有这较为详细的描述,http: //bytes.com/topic/net/answers/613564-difference-between-carriage-return-r -new-line-n这里边也些讨论.)

    但在具体实施里又有了问题, 由于在试这种方案前想着用escape来着, 这样jsp文件里有试escape时离下的痕迹. 但违反了"谋定而行,行且坚毅"的原则,没有把escape清除掉.这样在试"替换"方案里有了干扰.再一次验证了"谋定而行,行且坚毅"的重要性.


    清除escape的干扰后,在把@再次替换成回车符时有了麻烦事, 我用这样的方式: content.replace(/@/g,"\r\n"), 不行,"\r\n"在textarea里原样显示.换成"\\r\\n",还是不行,原样显示.来点狠的,再加一个"\",即"\\\r\\\n",起作 用换行了,但在textarea里显示效果是多了一个"\". 呵!! 你真狠! 用两个"\\"时不起作用, 用三个时又过了,总不能让我用2.5个"\"吧??? 这怎么办? 强忍着"疼痛",近似绝望地试了试"\\n",嘿,成了!!

    姑且不管为什么, 能用了就行.
    
    于是往配置库里checkin了刚改的jsp文件.

2
0
分享到:
评论
3 楼 lg068 2014-07-17  
data = data.replace("\n","<br/>");
2 楼 rmn190 2009-03-26  
是不是JSON的一个什么parser可以啊? 当时因为活比较急,也没有做针对性的实验.

过了后,也没再想.

仁兄有什么好的想法?
1 楼 wangyangqq2008 2009-03-26  
变通方法可以解决,
仁兄有没有再研究过怎么能在eval里处理回车符号

相关推荐

    javascript执行eval函数时利用正则表达式去掉回车符换行符和注释

    在利eval函数执行一段代码时,必须要去掉里面的换行符和回车符,但如果不去掉注释,会出现问题,就是注释后面的所有内容不执行,被当作是注释的内容,所以还要去掉各种注释,这里的解决方案可以把所有注释都去掉

    前端项目-expr-eval.zip

    前端项目-expr-eval,Mathematical expression evaluator

    rank-eval-client-6.2.3-API文档-中英对照版.zip

    赠送jar包:rank-eval-client-6.2.3.jar; 赠送原API文档:rank-eval-client-6.2.3-javadoc.jar; 赠送源代码:rank-eval-client-6.2.3-sources.jar; 赠送Maven依赖信息文件:rank-eval-client-6.2.3.pom; 包含...

    Eval:Eval是用Swift编写的轻量级解释器框架,可在运行时评估表达式

    {评估}依赖经理 :laptop_computer:关于Eval是用以下语言编写的轻量级解释器框架: 斯威夫特 :mobile_phone: iOS, :desktop_computer: macOS,以及 :penguin: Linux平台。 它在运行时使用您定义的运算符和数据类型对...

    rank-eval-client-6.8.3-API文档-中文版.zip

    赠送jar包:rank-eval-client-6.8.3.jar; 赠送原API文档:rank-eval-client-6.8.3-javadoc.jar; 赠送源代码:rank-eval-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:rank-eval-client-6.8.3.pom; 包含...

    在java中利用动态编译实现eval

    我们知道,在很多脚本语言中都有eval函数,它可以把字符串转换为表达式并执行.如在javaScript中: var str = aid.value + ".style.top = 10;"  把一个id为"aid"的控制的值取出来加合并成一个字符串,如果aid的值是...

    ide-eval-resetter-2.3.5.zip

    ide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d...

    IE 当eval遇上function的处理

    情况1:eval里没有function,直接执行: eval&#40;“alert(‘ss’&#41;;”);//所有浏览器正确均输出 情况2:eval里有function,function立即执行: eval&#40;“(function(&#41;{alert&#40;‘ss’&#41;;})();”);//...

    rank-eval-client-6.2.3-API文档-中文版.zip

    赠送jar包:rank-eval-client-6.2.3.jar 赠送原API文档:rank-eval-client-6.2.3-javadoc.jar 赠送源代码:rank-eval-client-6.2.3-sources.jar 包含翻译后的API文档:rank-eval-client-6.2.3-javadoc-API文档-...

    eval解密脚本 eval解密脚本 eval解密脚本

    eval解密脚本FLASH eval解密脚本 eval解密脚本

    python 为什么说eval要慎用

    eval前言 In [1]: eval&#40;2+3&#41; Out[1]: 5 In [2]: eval&#40;'[x for x in range(9&#41;]') Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8] 当内存中的内置模块含有os的话,eval同样可以做到命令执行: In [3]: ...

    Python库 | eval_hj3415-0.0.8-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:eval_hj3415-0.0.8-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    ide-eval-resetter-2.2.4.jar

    IDE软件试用30天:ide-eval-resetter-2.2.4.jar

    DataBinder.Eval总结

    DataBinder.Eval的基本格式 在绑定数据时经常会用到这个句程序:&lt;%# DataBinder.Eval(Container.DataItem,"xxxx")%&gt;或者&lt;%# DataBinder.Eval(Container,"DataItem.xxxx")%&gt; 今天又学到一种,而且微软也说这种方法...

    c# eval 函数

    Console.WriteLine("TestStatic0: {0}", eval.EvaluateInt("GetNumber")); Console.WriteLine("TestStatic1: {0}", eval.EvaluateString("GetString")); Console.WriteLine("TestStatic2: {0}", eval.EvaluateBool(...

    rank-eval-client-6.3.0-API文档-中文版.zip

    赠送jar包:rank-eval-client-6.3.0.jar; 赠送原API文档:rank-eval-client-6.3.0-javadoc.jar; 赠送源代码:rank-eval-client-6.3.0-sources.jar; 赠送Maven依赖信息文件:rank-eval-client-6.3.0.pom; 包含...

    使用NLG-Eval需要依赖的数据包

    使用NLG_Eval需要依赖的数据包

    ide-eval-resetter

    ide-eval-resetter

    rank-eval-client-6.8.3-API文档-中英对照版.zip

    赠送jar包:rank-eval-client-6.8.3.jar; 赠送原API文档:rank-eval-client-6.8.3-javadoc.jar; 赠送源代码:rank-eval-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:rank-eval-client-6.8.3.pom; 包含...

    Shell中eval的用法示例

    功能说明:告知shell取出eval的参数,重新运算求出参数的内容。 语 法:eval [参数] 补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。 参 数:参数不限数目,彼此之间用分号分开。 1.执行命令行...

Global site tag (gtag.js) - Google Analytics