[原]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>  

原文地址:https://www.cnblogs.com/xjyggd/p/1687871.html