我希望能够在 url中获取或检测%20
y类型的所有空格,并使用 JavaScript 替换它们。+
-
我有这个正则表达式/[\s\%20\+]/g
,但我不知道它是否真的有效,我不太了解正则表达式 xD。
示例+
:
http://miurl.com/mi+url+web
我希望它是这样的:
http://miurl.com/mi-url-web
示例%20
:
http://miurl.com/mi%20url%20web
我希望它是这样的;
http://miurl.com/mi-url-web
+
与和的例子%20
:
http://miurl.com/mi+url%20web
我希望它是这样的:
http://miurl.com/mi-url-web
在这里,我添加了我的散列网址:
http://miurl.com/#!mi+url%20web
我用事件处理它们,hashchage
通常我的意思是完全手动重新加载页面,只有在用它更正 URL 时-
才会创建无限重定向。我创建了一个引用此处显示的代码的代码,但是这样做window.location.hash
会使我无限重定向。
javascript
这是替换 URI 的哈希(片段/标签)的代码。它可以放在
<head>
HTML 中,因此它是要执行的第一件事。你可以看到它正在被替换
正则表达式说明:
\+
-+
文字(更多关于特殊字符)。
|
-交替::: 像一个OR
(更多关于交替)。
%20
-%20
逐字文本。/g
-修饰符g
::: 查找所有出现(全局)。正则表达式演示:https
://regex101.com/r/R35zAs/1 脚本演示: http: //mariano.uphero.com/50400/#demo+del%20script
替换空格的其他选项:
/[+ ]|%20/g
- 也替换文字空格。/(?:[+ ]|%20)+/g
- 转换为单个连字符中的多个连续空格。.htaccess
如果您还想从 替换路径 ( pathname )的字符
.htaccess
,则代码为:描述
%20
,因为 Apache 将它们直接解释为空格。因此,[+ ]
(a+
或空格)被替换。当有多个字符时,第一个规则会替换,使用
[N]
导致所有规则再次执行的标志(我们生成一个循环)。^([^+ ]*)[+ ]
- 从一开始就匹配1.任意数量的非+
空格字符(在 中捕获$1
),以及2.匹配一个字符[+ ]
。([^+ ]*[+ ].*)
- 捕获$2
1.更多非+
空格字符,2.一个搜索到的字符,以及3.其余所有字符。/*$
- 匹配 URI 末尾的斜杠,将其排除在组之外,并且不将其包含在重写中(否则,每个替换的空格都会累积尾部斜杠)。$1-$2
- 第一个+
或空格之前的所有内容,a-
和之后的所有内容。第二条规则是一样的,只是它只匹配一个
+
或空格(只能是 1,因为如果它到了这么远,它就与前面的规则不匹配)。在这种情况下,我们不是重写,而是使用重定向,[R]
从而更改正在访问的 URL。演示
http://mariano.uphero.com/50400/b/path+with%20spaces#and+hash%20also
我认为通过这个简单的功能,您可以替换您正在寻找的内容
Jorious答案版本 1中代码的缩小版
解释
/
,之后表示全局搜索修饰符g
。%20
是字符序列之一,直接放置\+
该字符已被转义+
,它对应于其他字符序列,因为它是一个特殊字符|
它被放置在前面的两个表达式之间,以指示一个、另一个或两者(逻辑析取运算符,ó
(OR)布尔值)我想最后我解决了它,如果我有什么不对的地方希望你能帮助我纠正它,我将非常感激,这是我的代码:
在重写规则中的 .htaccess 文件中,我只允许字母数字字符和“+”和“/”,通过包含“+”符号我允许空格,而无需在 URL 中替换为“-”字符或在 php 或 javascript 中执行任何其他功能,因为 %20 是一个自动编码的特殊字符,通过在重写规则中允许它,它会对其进行解码并将其传递给“$1”,从而节省您的工作。
RewriteRule ^([a-zA-Z0-9+/]+)$ index.php?views=$1
RewriteRule ^([a-zA-Z0-9+ <--- "+" 空格