【问题标题】:URIError: malformed URI sequence?URIError:格式错误的 URI 序列?
【发布时间】:2013-12-20 09:33:34
【问题描述】:

当我需要从中提取参数值的 URL 字符串中存在 % 符号(如 60% - Completed)时,以下代码错误与 URIError: malformed URI sequence? 一起出现。 http://some-external-server.com/info?progress=60%%20-%20Completed

   <SCRIPT type="text/javascript">
            function getParameterByName(name) {
                name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
                var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
                results = regex.exec(location.search);
                return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
            }
    </SCRIPT>

我无法控制服务器,需要在我的 html 页面中处理输出。

【问题讨论】:

标签: javascript jquery html escaping uri


【解决方案1】:

我认为您需要将百分号 URI 编码为“%25”

http://some-external-server.com/info?progress=60%25%20-%20Completed 

[编辑]

我猜你可以这样做:

var str = "60%%20-%20completed";
var uri_encoded = str.replace(/%([^\d].)/, "%25$1");
console.log(str); // "60%25%20-%20completed"
var decoded = decodeURIComponent(uri_encoded);
console.log(decoded); // "60% - completed"

【讨论】:

  • 如上所述 - 我无法控制服务器,需要在我的 html 页面中处理输出。
  • 那时您可能无法使用 decodeURIComponent,或者您可能需要在将 url 传递给该函数之前对其进行预处理。空格是网址中唯一可以期待的其他特殊字符吗?
  • 否,URL 中可能有其他特殊字符。有什么可以让我在这种情况下提取参数值吗?
  • 我尝试在getParameterByName 函数上使用它,但似乎无法正常工作。您能否在上述代码的上下文中为新手提供一个示例。
  • 这里是代码:&lt;SCRIPT type="text/javascript"&gt; function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regex = new RegExp("[\\?&amp;]" + name + "=([^&amp;#]*)"), results = regex.exec(location.search); var uri_encoded = results[1].replace(/%([^\d].)/, "%25$1"); return results == null ? "" : decodeURIComponent(uri_encoded.replace(/\+/g, " ")); } &lt;/SCRIPT&gt;
猜你喜欢
  • 2020-07-01
  • 2018-01-29
  • 1970-01-01
  • 2014-11-09
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 2018-04-24
相关资源
最近更新 更多