• [原]JS Eval参数单引号问题


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD>
     <BODY>
     {
     alert(str);
    idden; overflow-y: hidden;"> }
    <mce;"> <mce;"> 0px; 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;" id="_mcePaste"> var sstr = "gg'";
     var s = "ff" + sstr  + "dd" ;
     var func = eval("test");
     func.call(func,s);
      </script>
     </BODY>
    </HTML>

    最近在弄JS验证功能的时候 遇到了Eval的参数问题,花了些时间解决之后,稍微总结了下。

    问题示例:

    <HTML> 

    <BODY> 

     <script>

     var test =

     {show:function(str){alert(str);}}

     var s = "ffd'd" ;

     eval("test.show('" +s + "')");

     </script>  

    </BODY>

    </HTML>

      执行会报缺少')'

    方法一: 使用转义符

    <script>

     var test =

     {show:function(str){alert(str + 'test');}}

     var s = "ffd'd" ;

     eval("test.show('" +s.replace(/\\/g,"\\\\").replace(/'/g,"\\\'") + "')");

     </script>

    方法二:把方法参数作为JS类的属性

     <script>

     var test = {show:function(){alert(this.str);},str:''};

     var s = "ffd'd" ;

     test.str = s;

     eval("test.show()");

     </script> 

    方法三: 使用call

     <script>

     var test = {show:function(str){alert(str);}};

     var s = "ffd'd" ;

    var func = eval("test.show");

    func.call(func,s);

     </script>  

    方法四:最简单的方法,使用function对象

     <script>

     var test = {show:function(str){alert(str);}};

     var s = "ffd'd" ;

    var func = eval("test.show");

    func(s);

     </script>  

  • 相关阅读:
    软件测试—— junit 单元测试
    falut error failure 的区别与理解
    错误的反思
    只能在微信浏览器打开的链接,如何查看源码
    PHPManage for IIS Windows 10
    wamp mysql配置
    CSS Flexbox 学习指南、工具与框架
    Android SDK 在线更新镜像服务器资源
    64位win2003 IIS6运行32位的.NET程序
    让服务器iis支持.apk文件下载的设置方法
  • 原文地址:https://www.cnblogs.com/xjyggd/p/1687871.html
Copyright © 2020-2023  润新知