javascript - 如何对本身就是 URL 的 URL 参数进行 URL 编码?

标签 javascript jquery html ruby-on-rails ajax

快速背景-

我正在对我编写的返回 JSON 响应的服务进行 jQuery ajax 调用。该服务接受网站 URL(即 www.google.com、www.xyz.com/abc123)。请求格式如下:

http://www.mysite.com/[url]

...其中 [url] 是用户提供的 URL(同样,类似于 www.google.com/abc)

我需要对参数进行 URL 编码,因为 mysite.com/www.google.com 给我错误。

我的问题是,所有标准的 javascript 编码功能实际上并不对 URL 进行编码。

一个例子:

<html>
<head>
<script>
document.write("encodeURIComponent = " + encodeURIComponent("www.google.com") + "<br />");
document.write("encodeURI = " + encodeURI("www.google.com") + "<br />");
document.write("escape = " + escape("www.google.com"));
</script>
</head>
<body>
</body>

... 具有以下输出:

encodeURIComponent = www.google.com
encodeURI = www.google.com
escape = www.google.com

使用 JavaScript/jQuery 实现此目的的正确方法是什么?

我认为这无关紧要,但以防万一,这是一个 Rails 3.0.7 应用程序。

编辑更多细节

如果 www.google.com 已经进行了 URL 编码,并且句号在我的 URL 中没有问题 (www.mysite.com/www.google.com),为什么我会收到此错误?

来自 Chrome 开发者工具:

GET http://localhost:3000/s/www.google.com 404 (Not Found)

我的 jQuery 片段:

$.getJSON("http://localhost:3000/s/" + encodeURI($("#txtURL").val()), function(data) {
        alert(data.result.url);
    });

最佳答案

这是一个完全有效的 URL:

http://mysite.com/s/www.google.com

我怀疑您只是遇到了 Rails format 的东西(即 URL 末尾的 .html 将格式设置为 HTML,。 js for JSON, ...) 所以你只需要修复你的路由以防止格式自动检测妨碍:

map.connect '/s/:url', :requirements => { :url => /.*/ }, ...

match '/s/:url' => 'pancakes#house', :constraints => { :url => /.*/ }, ...

或您正在使用的任何路由语法。

如果您不告诉 rails :url 应该匹配 /.*/(即任何东西),它会尝试解释路由作为格式说明符,这将失败并且 Rails 将返回 404,因为它无法确定如何路由 URL。

关于javascript - 如何对本身就是 URL 的 URL 参数进行 URL 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6804751/

相关文章:

javascript - 有没有办法使用 Cypress 命令设置 `display` 之类的 CSS 属性?

javascript - 通过选择更改 div 内容的脚本在 Firefox 中不起作用

javascript - 将具有多个全名的字符串转换为具有第一个字符姓氏的名称

jquery - 选中单选按钮时显示一个 div,并将所需属性仅添加到输入字段

html - 如何动态设置 ng-model 以对应对象属性

javascript - 为什么IE8不处理iframe onload事件?

javascript - 在初始化新日历之前,在引导选项卡上销毁 fullcalendar 单击

javascript - 将事件绑定(bind)到 div 但 'not' 内部 div

jquery - Ajax 路由到 Controller 方法 MVC 4

jquery - Jquery UI Datepicker 上的 block 日历