Cra*_*lot 44 html javascript encoding ruby-on-rails
下面的SO帖子是全面的,但所描述的所有三种方法都无法编码.
例如,如果我运行三个方法(即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添加尾部斜杠就可以解决这个问题.把它扔到那里,以防它对任何人都有用.
约翰
sup*_*ova 30
期间不应该打破网址,但我不知道你是如何使用这段时间的,所以我不能说.我所知道的所有函数都没有编码'.' 对于网址,意味着您必须使用自己的函数来编码'.' .
您可以对数据进行base64编码,但我不相信在js中有一种本地方法可以做到这一点.您还可以在客户端和服务器端使用ASCII等效项(%2E)替换所有句点.
基本上,通常不需要编码'.',所以如果你需要这样做,你需要提出自己的解决方案.您可能还想进行进一步的测试,以确保'.' 实际上会打破网址.
心连心
我有同样的问题,我的.htaccess打破了输入值.因为我不想改变.htaccess所做的事情,所以我用它来修复它:
var val="foo.bar";
var safevalue=encodeURIComponent(val).replace(/\./g, '%2E');
Run Code Online (Sandbox Code Playgroud)
这样就可以替换所有标准编码.与ascii等效%2E.PHP自动转换回.在$ _REQUEST值中,但.htaccess并未将其视为一个句点,所以事情都很好.
我有同样的问题,也许我的解决方案将来可以帮助其他人。
在我的例子中,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)