admin 管理员组

文章数量: 887021

在html中url的写法,html

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

下面的SO帖子很全面,但是所描述的所有三种方法都无法编码一段时间。

帖子:用JavaScript编码URL?

例如,如果我运行这三种方法(即转义,encodeURI,encodeURIComponent),则它们都不对句点进行编码。

因此,“ food.store”显示为“ food.store”,这会破坏URL。 由于Rails应用程序无法识别URL为有效URL,并显示404错误页面,因此它会破坏URL。 也许是Rails路由文件中的配置错误?

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

8个解决方案

58 votes

我知道这是一个旧线程,但是我在这里看不到任何引起原始问题的URL示例。 几天前,我自己在Java应用程序中遇到了类似的问题。 在我的情况下,带句点的字符串位于URL的路径元素的末尾,例如。

[HTTP://没有server/app/Servlet/test.string]

在这种情况下,我正在使用的Spring库仅将字符串的“测试”部分传递给我的控制器类的相关注释方法参数,大概是因为它将“ .string”视为文件扩展名并剥离了 它走了。 也许这与上面的原始问题是相同的潜在问题?

无论如何,我可以通过在URL末尾添加斜杠来解决此问题。 只是把它扔在那里,以防对其他人有用。

约翰

John Rix answered 2020-07-24T11:58:32Z

30 votes

句点不应该破坏URL,但我不知道您如何使用句点,因此我无法真正说出。 我所知道的功能都没有编码'。' 网址,这意味着您将必须使用自己的函数来编码“。” 。

您可以对数据进行base64编码,但是我不相信在js中有一种本机的方法。 您还可以在客户端和服务器端将所有句点都替换为其等效的ASCII(%2E)。

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

hth

superultranova answered 2020-07-24T11:57:54Z

9 votes

我的.htaccess使用打破输入值时遇到了同样的问题。由于我不想更改.htaccess的操作,因此使用它来修复它:

var val="foo.bar";

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

这将完成所有标准编码,然后替换。 并具有等价的%2E。 PHP自动转换回。 在$ _REQUEST值中,但.htaccess不会将其视为句号,因此一切都很好。

Matthew Cornelisse answered 2020-07-24T11:58:56Z

7 votes

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

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

Pointy answered 2020-07-24T11:59:21Z

3 votes

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

就我而言,该网址是使用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

TJ. answered 2020-07-24T11:59:54Z

1 votes

如果可能的话,使用.htaccess文件将使其非常酷,轻松。 只需在句号前添加一个\。 像:\.

David Lartey answered 2020-07-24T12:00:14Z

0 votes

这是一个Rails问题,请参见Rails REST路由:资源项ID中的点以获取解释(以及Rails路由指南,第3.2节)

user1251840 answered 2020-07-24T12:00:34Z

0 votes

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

user8296471 answered 2020-07-24T12:00:55Z

本文标签: 在html中url的写法 HTML