如何在Javascript中编码URL的句点?

Cra*_*lot 44 html javascript encoding ruby-on-rails

下面的SO帖子是全面的,但所描述的所有三种方法都无法编码​​.

发布:在JavaScript中编码URL?

例如,如果我运行三个方法(即escape,encodeURI,encodeURIComponent),它们都不会编码句点.

所以"food.store"出现了"food.store",它打破了URL.它会中断URL,因为Rails应用程序无法将URL识别为有效并显示404错误页面.也许这是Rails路由文件中的配置错误?

使用Javascript为URL编码句点的最佳方法是什么?

Joh*_*Rix 59

我知道这是一个旧线程,但我在这里没有看到任何导致原始问题的URL示例.几天前我用Java应用程序遇到了类似的问题.在我的例子中,带有句点的字符串位于URL的path元素的末尾,例如.

http://myserver.com/app/servlet/test.string

在这种情况下,我正在使用的Spring库只是将该字符串的'test'部分传递给我的控制器类的相关注释方法参数,可能是因为它将'.string'视为文件扩展名并剥离它离开了.也许这与上面原始问题的基本问题相同?

无论如何,我只需通过向URL添加尾部斜杠就可以解决这个问题.把它扔到那里,以防它对任何人都有用.

约翰

  • 谢谢!我使用.NET WebApi2将这个问题撞到了墙上.我刚刚添加了尾部斜杠并将其清除.谢谢! (2认同)
  • 嗯,这不使用rails 3.2; 尾随斜线首先被吃掉(在此之前和之后的"类型"被剥离.任何想法? (2认同)

sup*_*ova 30

期间不应该打破网址,但我不知道你是如何使用这段时间的,所以我不能说.我所知道的所有函数都没有编码'.' 对于网址,意味着您必须使用自己的函数来编码'.' .

您可以对数据进行base64编码,但我不相信在js中有一种本地方法可以做到这一点.您还可以在客户端和服务器端使用ASCII等效项(%2E)替换所有句点.

基本上,通常不需要编码'.',所以如果你需要这样做,你需要提出自己的解决方案.您可能还想进行进一步的测试,以确保'.' 实际上会打破网址.

心连心

  • @crashalot 我认为您的 Rails 路由配置需要修复。我不是一个 Rails 人,但 Rails 可能不支持句点。查看这个网址,我相信它可以解决您的问题:http://masonoise.wordpress.com/2010/02/04/rails-routes-with-string-ids-and-periods/ (2认同)

Mat*_*sse 9

我有同样的问题,我的.htaccess打破了输入值.因为我不想改变.htaccess所做的事情,所以我用它来修复它:

var val="foo.bar";
var safevalue=encodeURIComponent(val).replace(/\./g, '%2E');
Run Code Online (Sandbox Code Playgroud)

这样就可以替换所有标准编码.与ascii等效%2E.PHP自动转换回.在$ _REQUEST值中,但.htaccess并未将其视为一个句点,所以事情都很好.

  • Javascript escape() 也会将 %2E 转换回原来的时期;这是最好、最直接的答案。 (4认同)

Poi*_*nty 7

期间不必在URL中编码.是要查看的RFC.

如果一段时间"破坏"某些东西,可能是你的服务器正在对URL进行自己的解释,这当然是一件好事,但这意味着你必须想出一些你自己的编码方案.你自己的元字符需要转义.


TJ.*_*TJ. 5

我有同样的问题,也许我的解决方案将来可以帮助其他人。

在我的例子中,url 是使用 javascript 生成的。句点用于分隔 url 中的值(吊索选择器),因此选择器本身不允许有句点。

我的解决方案是将所有句点替换为 html 实体,如图1所示:

图1:解决方案

var urlPart = 'foo.bar';
var safeUrlPart = encodeURIComponent(urlPart.replace(/\./g, '.'));

console.log(safeUrlPart); // foo%26%2346%3Bbar
console.log(decodeURIComponent(safeUrlPart)); // foo.bar
Run Code Online (Sandbox Code Playgroud)