javascript组件和转义?

javascript组件和转义?,javascript,escaping,encodeuricomponent,Javascript,Escaping,Encodeuricomponent,我使用JS将encodeURIComponent字符串发送到PHP文件写入,多年来一直工作良好;直到最近,我还遇到了一个奇怪的效果,那就是文本需要用escape进行进一步编码才能正常工作!只有当我使用开源wysiwyg编辑器时,sympton才会开始显示 URI中哪些有问题的字符需要转义才能修复?我过去认为URI只保留?&=使其语法正常工作 您所描述的情况可以通过包含两层嵌套的类似URL的值的URL来解释——尽管如果您不告诉我们字符串是什么以及如何使用它,我们无法知道 考虑使用查询参数的URL,

我使用JS将encodeURIComponent字符串发送到PHP文件写入,多年来一直工作良好;直到最近,我还遇到了一个奇怪的效果,那就是文本需要用escape进行进一步编码才能正常工作!只有当我使用开源wysiwyg编辑器时,sympton才会开始显示


URI中哪些有问题的字符需要转义才能修复?我过去认为URI只保留?&=使其语法正常工作

您所描述的情况可以通过包含两层嵌套的类似URL的值的URL来解释——尽管如果您不告诉我们字符串是什么以及如何使用它,我们无法知道

考虑使用查询参数的URL,该参数是另一个URL:

http://me.com?url=http://you.com?qp=1
该URL可能会被误解,因此我们通常会对
you.com
URL进行URL编码,为我们提供:

http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3D1
使用此URL的任何人现在都可以提取名为
URL
的查询参数,其值为
http%3A%2F%2Fyou.com%3Fqp%3D1
,对其进行解码(通常框架或库会为您解码),然后使用它跳转到或调用该URL

但是,考虑一下
you.com
URL本身有一个查询参数的情况,它不是第一个示例中给出的
?qp=1
,而是需要对其本身进行URL编码的某个参数。为了简单起见,我们只使用“猫?图片”。我们需要对其进行编码,生成查询参数

换句话说,所讨论的URL将是

?qp=cat%3Fpictures
如果我们只是按原样使用,那么我们的整个URL就变成了

http://me.com?url=http%3A%2F%2Fyou.com%3Fqp=cat%3Fpictures
不幸的是,如果我们现在以一种天真的方式来解码,我们会

http://me.com?url=http://you.com?qp=cat?pictures
换句话说,嵌套的URL也已解码,这意味着它将认为URL有两个查询参数,即
URL
qp
。为了成功地处理这个问题,我们需要对第二个查询参数进行第二次编码,从而产生

http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3Dcat%253Fpictures
但是,请注意,如果您使用您的语言或环境的内置工具和库来处理查询参数,大多数情况下都会自动发生,您无需担心

只有在使用开源wysiwyg编辑器时,症状才会开始显示


编辑器只在文件中放置字符。很难想象是一个编辑器导致了您所指的问题,除非一个编辑器被配置为使用智能引号,例如,这几乎会破坏所有涉及引号的内容。

请提供有问题的特定字符串,以及当您对其应用
encodeURIComponent
时会发生什么,“奇怪的效果”是什么让你觉得文本需要进一步编码。顺便说一句,编码URI涉及很多很多字符,而不仅仅是
#
,尽管还不清楚这与您的问题有关。
encodeURIComponent
只编码:
A-Z A-Z 0-9-.!~*'()
,和
转义
对特殊字符进行编码,除了:
@*.+-./
是的,我认为与您解释的逻辑相同。它不能由编辑器引起,过去我不需要txt=escape(txt)行。我仔细研究了encodeURICoponent和escape之间的区别,我能想到的唯一字符可能是offdender,它是我用来表示文件结束的~符号。但它应该这样做吗?函数saveText(){var txt=”“;for(i=0;我不将此代码放在注释中。请将其添加到您的问题中。通常,不要自己将URL粘贴在一起。请使用类似的库或框架提供的库。