Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尽管使用htmlspecialchars对单引号进行编码,JavaScript仍然抱怨需要在函数调用中转义这些引号_Javascript_Jquery_Htmlspecialchars_Single Quotes - Fatal编程技术网

尽管使用htmlspecialchars对单引号进行编码,JavaScript仍然抱怨需要在函数调用中转义这些引号

尽管使用htmlspecialchars对单引号进行编码,JavaScript仍然抱怨需要在函数调用中转义这些引号,javascript,jquery,htmlspecialchars,single-quotes,Javascript,Jquery,Htmlspecialchars,Single Quotes,奇怪的事情发生了,我被难住了 我有一个链接基本上是这样的: <a href="javascript:uploadVariantPicture('size:&#039;test2&#039');">Link</a> 如您所见,我使用参数size调用函数uploadVariantPicture:'test2&039 然而,当我实际单击链接时,JavaScript抱怨两个编码的单引号没有被转义。我得到以下错误: SyntaxError:意外

奇怪的事情发生了,我被难住了

我有一个链接基本上是这样的:

<a href="javascript:uploadVariantPicture('size:&#039;test2&#039');">Link</a>
如您所见,我使用参数size调用函数uploadVariantPicture:'test2&039

然而,当我实际单击链接时,JavaScript抱怨两个编码的单引号没有被转义。我得到以下错误:

SyntaxError:意外的标识符“test2”。应结束参数列表

如果我解码两个编码的单引号并使用反斜杠转义,那么函数调用成功。但问题是我需要对它进行编码。我不能让它不编码,也不能逃避引用。这对我的处境不起作用


非常感谢您的帮助。我非常困惑。

考虑使用JavaScript正确地附加事件处理程序,这样您就不必担心逃避问题,也不必依赖全局对象的污染来运行脚本:

const uploadVariantPicture=arg=>console.logarg; document.querySelector'a'。addEventListener'click',=>{ uploadVariantPicturesize:'test2'; };
Link考虑使用JavaScript正确地附加事件处理程序,这样您就不必担心逃逸问题,也不必依赖全局对象的污染来运行脚本:

const uploadVariantPicture=arg=>console.logarg; document.querySelector'a'。addEventListener'click',=>{ uploadVariantPicturesize:'test2'; };
链接HTML字符实体和转义在解析源代码时被HTML解析器替换。对于引号,它允许在用于引用源中属性值的HTML属性中包含相同类型的引号

例如

将生成的href属性值为

  javascript:uploadVariantPicture('size:'test'');
HTML解析器删除外部双引号后

选项可能包括在href值内转义双引号HTML,这取决于uploadVariantPicture接受的语法,包括在单引号之前的反斜杠转义,如本文所述,或者根本不使用javascript:pseudo协议,以便在javascript中添加事件侦听器


不使用javascript:强烈建议使用伪协议-基本上它是HTML3的保留。

解析源代码时,HTML字符实体和转义被HTML解析器替换。对于引号,它允许在用于引用源中属性值的HTML属性中包含相同类型的引号

例如

将生成的href属性值为

  javascript:uploadVariantPicture('size:'test'');
HTML解析器删除外部双引号后

选项可能包括在href值内转义双引号HTML,这取决于uploadVariantPicture接受的语法,包括在单引号之前的反斜杠转义,如本文所述,或者根本不使用javascript:pseudo协议,以便在javascript中添加事件侦听器


不使用javascript:强烈建议使用伪协议-基本上这是HTML3的保留。

您能详细说明一下吗?我不知道你的确切意思。当HTML解码href属性值时,剩下的是js代码uploadVariantPicture'size:'test2;。这显然是无效的,我不是在解码。我把它编码好了。那么,为什么浏览器在js调用中将其解释为一个文本单引号呢?您已经编写了HTML,当它被解析到DOM中时,实体转义被解码。您能详细说明一下吗?我不知道你的确切意思。当HTML解码href属性值时,剩下的是js代码uploadVariantPicture'size:'test2;。这显然是无效的,我不是在解码。我把它编码好了。那么,为什么浏览器在js调用中将其解释为文字单引号呢?您已经编写了HTML,当它被解析到DOM中时,实体转义被解码。如果我在调用中编码了双引号,这仍然有效吗?当然,只需上传VariantPicture'size:test2',或者使用backticksNo,我需要对其进行htmlspecialchars编码。没有文字引号,所以我不能倒勾。倒勾有什么问题?uploadVariantPicture`size:test2`在语法上是有效的。如果您需要uploadVariantPicture来使用编码字符串,那么我强烈建议让uploadVariantPicture执行该转换,而不是让每个调用者分别执行该转换。@TonyFriz您需要选择有效的JS代码,然后只有在将其放入HTML href属性时,才能对文本进行实体转义。这意味着一切!角色变为,所有“角色”变为&apos;。但是,认真地说,正如这个答案所建议的,首先不要将JS代码放在HTML属性中。如果我有JS代码,这仍然有效吗
在调用中编码双引号?当然,只需上传VariantPicture'size:test2',或者使用backticksNo,我需要它是htmlspecialchars编码的。没有文字引号,所以我不能倒勾。倒勾有什么问题?uploadVariantPicture`size:test2`在语法上是有效的。如果您需要uploadVariantPicture来使用编码字符串,那么我强烈建议让uploadVariantPicture执行该转换,而不是让每个调用者分别执行该转换。@TonyFriz您需要选择有效的JS代码,然后只有在将其放入HTML href属性时,才能对文本进行实体转义。这意味着一切!角色变为,所有“角色”变为&apos;。但是,认真地说,正如这个答案所建议的,首先不要将JS代码放在HTML属性中?这对我的情况来说非常方便。它不受欢迎,因为它存在执行任意javascript代码的安全风险,而且javascript:实际上不是一个协议。在这个时候,我会认为它更被视为过时的用法,因为有了更现代的方法来做同样的事情,所以使用javascript:的需求就会消失?这对我的情况来说非常方便。它不受欢迎,因为它存在执行任意javascript代码的安全风险,而且javascript:实际上不是一个协议。在这个时候,我会认为它更被视为过时的用法,因为有了更现代的方法来做同样的事情,开发这样的方法,使用javascript的需求就会消失。
  javascript:uploadVariantPicture('size:'test'');