Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中对URL的句点进行编码?_Javascript_Html_Ruby On Rails_Encoding - Fatal编程技术网

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

如何在Javascript中对URL的句点进行编码?,javascript,html,ruby-on-rails,encoding,Javascript,Html,Ruby On Rails,Encoding,下面的SO帖子很全面,但所描述的三种方法都无法对周期进行编码 职位: 例如,如果我运行这三个方法(即escape、encodeURI、encodeURIComponent),它们都不会对句点进行编码 所以“food.store”被命名为“food.store”,这打破了URL。它会中断URL,因为Rails应用程序无法将URL识别为有效,并显示404错误页面。也许是Rails路由文件中的配置错误 用Javascript为URL编码句点的最佳方法是什么?句点不必在URL中编码。是要查看的RFC 如

下面的SO帖子很全面,但所描述的三种方法都无法对周期进行编码

职位:

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

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


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

句点不必在URL中编码。是要查看的RFC


如果句点“破坏”了某些内容,则可能是您的服务器正在对URL进行自己的解释,这当然是一件好事,但这意味着您必须在自己的元字符需要转义时提出自己的编码方案。

句点不应破坏URL,但我不知道你是怎么用这个句号的,所以我真的不能说。我所知道的函数中没有一个对url的“.”进行编码,这意味着您必须使用自己的函数对“.”进行编码

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

基本上,通常不需要对“.”进行编码,因此如果需要这样做,您需要提出自己的解决方案。您可能还想做进一步的测试,以确保“.”实际上会破坏url


hth

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

在本例中,我使用的Spring库只是将该字符串的“test”部分传递给我的控制器类的相关带注释的方法参数,可能是因为它将“.string”视为文件扩展名并将其剥离。也许这是与上述原始问题相同的根本问题

无论如何,我可以通过在URL中添加一个尾随斜杠来解决这个问题。把它扔出去,以防对其他人有用


John

如果可能的话,使用.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

这是一个rails问题,请参阅以获取解释(以及rails路由指南,第3.2节)

我遇到了与.htaccess中断输入值相同的问题。 由于我不想更改.htaccess正在执行的操作,因此我使用以下方法来修复它:

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

这将完成所有标准编码,然后替换。有ascii等价物%2E。PHP会自动转换回。在$\u请求值中,但.htaccess没有将其视为一个句点,因此一切都很好。

我在RESTAPI URL中遇到了.s问题。事实上,它们被解释为扩展,以其自身的方式是有意义的。转义没有帮助,因为它们在调用之前是未转义的(如前所述)。添加尾随/尾随也没有帮助。我通过将该值作为命名参数传递来解决这个问题。e、 g.api/Id/Text.string到api/Id?arg=Text.string。您需要修改控制器上的路由,但处理程序本身可以保持不变。

您不应该使用或


console.log(encodeURIComponent('%^&*')它以什么方式破坏URL?据我所知,句点不必编码。谢谢,更新了问题以反映您的问题。我在您的标记中添加了“ruby on rails”-这不是一般的URL问题,而是rails问题或特定于您的应用程序的问题。转义句点的另一个有效原因是Apache Sling中的URL选择器(由Day CQ使用):@crashalot我认为您的Rails路由配置需要修复。我不是rails的人,但rails可能不支持句点。看看这个url,我相信它解决了你的问题:我找不到我的路线,所以用了这个乱七八糟的work-around:Tag.find_by_-name(params[:id]+'.+params[:format])是的,你可以在javascript中用base64和atob和btoa进行本机编码。并不是说我会推荐它作为URL参数…实际上贝宝对返回的URL点进行编码。“website.com”已转换为“website%2ecom”。你可以从这里(添加一个返回url,不要在paypal中保存按钮,然后查看链接的电子邮件版本)谢谢!我在使用.NET WebApi2时遇到了这个问题。我刚刚添加了尾随斜杠,它被清除了。谢谢嗯,在使用rails 3.2时这不起作用;尾随的斜杠先被吃掉(在句号之前,后面的“type”被剥去。有什么想法吗?很好的一个家伙这么简单的修复谢谢。解决了express/nodejs.Javascript escape()的相同问题也会将%2E转换回原始句点;这是最好、最直接的答案。至少对于服务器呈现页面上以这种方式编码的URL,浏览器会在您跟随链接之前将编码的句点解码回来,因此在许多情况下这并不能解决问题。Sole
/。
/…
/%2E
/%2E%2E可以单独使用浏览器JavaScript来破坏
URL
构造函数。@正如我在回答中所写,根据服务器和/或ap的工作方式,句点可能是错误的