【问题标题】:encodeURIComponent and encodeURIencodeURIComponent 和 encodeURI
【发布时间】:2013-05-20 17:24:17
【问题描述】:

我正在尝试对 URL 中的法语字符进行编码。

url是用javascript构造的,然后我用window.open打开url。

例如,

var alt_title='Thierry Frémaux: Les confiden'
  1. window.open('http://example.com/alt_title'=+encodeURIComponent(altCatTit));

  2. window.open(encodeURI('http://example.com/alt_title='+encodeURIComponent(altCatTit))

1. 执行时,我看不到新弹出窗口的 url 中编码的法语字符。

2. 执行时,我确实看到它们正在被编码。

您能否告诉我为什么我需要对它们进行两次编码才能使它们在新弹出窗口的 URL 中显示为已编码?

在 URL 中编码特殊字符的方法是否正确?

修正了错字的抱歉!

【问题讨论】:

  • window.open() 中的变量与您分配的变量不同,并且您在分配中的值周围缺少引号。你没有收到语法错误吗?
  • 您在服务器脚本中看不到编码字符,因为它们在将参数传递给脚本之前会自动解码。
  • 很难理解发生了什么,因为你有一些不适合的代码,而且你在第一个有语法错误。
  • 如果您打算对字符串进行编码,您也不应该将%20 之类的编码字符放在字符串中——它们会被双重编码(在 2 中会被三重编码) )。
  • 男人=+ 是怎么回事?只需使用+

标签: javascript utf-8 character-encoding


【解决方案1】:

你在找这个吗?

var s = 'Thierry Frémaux: Les confiden'
var url = 'http://example.com/?alt_title=' + encodeURIComponent(s)

【讨论】:

  • 是的。当我实际执行此操作时 window.open('example.com/?alt_title=' + encodeURIComponent('Thierry Frémaux: Les confiden')) 这些字符似乎没有在新弹出窗口的 url 中编码。 é 但是当我这样做时, window.open(encodeURI('example.com/?alt_title=' + encodeURIComponent('Thierry Frémaux: Les confiden'))) é 编码正确
  • 这是因为浏览器会在显示之前对其进行解码吗?检查 HTTP 控制台并查看请求是否具有正确的 url。
  • 哦,我明白了。所以如果我想让字符在 url 中显示为编码,我必须对 URL 进行两次编码?
  • 谢谢!你说的对。它们被编码在 Request Header 中,浏览器可能会在显示 url 之前对其进行解码。
  • 两次编码能解决问题吗?如果我编码两次,浏览器会显示编码后的URL,那么我可以在服务器上解析get参数时再次“解码”它?
【解决方案2】:

encodeURIComponent() :假定它的参数是 URI 的一部分(例如协议、主机名、路径或查询字符串)。因此,它转义了用于分隔 URI 各个部分的标点符号。

encodeURI():用于对已有的url进行编码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2011-05-31
    • 2014-01-13
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多