Jac*_*ill 2 javascript replace special-characters
好吧,所以我目前正在以一种简单的方式模仿PHP的urlencode()函数,使用JS的escape()和一些字符串替换.我纯粹是看键盘字符,所以没有特殊的ASCII或Unicode字符.我遇到的问题是特定字符*,+和/ all在RegExp中具有特殊含义,并且看作JavaScript String Object方法使用RegExp参数,我无法完全复制PHP的urlencode().那么,如何使用JS设法在字符串中替换这些字符呢?
背景信息:
escape()与urlencode()的差异
@
::不转换,应该是%40
&
:被认为是一个html实体,因此被转义为%26amp%3B而不是%26
*
:未转换,应该是%2A
+
:未转换,应该是%2B
/
:未转换,应该是%2F
<
:被认为是一个html实体,因此被转义为%26lt%3B而不是%3C
>
:被认为是一个html实体,因此被转义为%26gt%3B而不是%3E
HTML实体转换非常简单
str.replace(/&/g, '%26').replace(/</g, '%3C').replace(/>/g, '%3E');
Run Code Online (Sandbox Code Playgroud)
并且@
可以替换,因为它不是保留的RegExp字符.
*
表示{0}
条件
+
表示{1}
条件
/
是基本的RegExp标记字符
感谢您的时间.
有没有理由不简单地用正则表达式中的反斜杠转义*,+和/字符?
s = s.replace( /\*/g, 'star' );
Run Code Online (Sandbox Code Playgroud)
对我来说,链接replace
s 并不是很优雅。我会尝试:
var symbols = {
'@': '%40',
'&': '%26',
'*': '%2A',
'+': '%2B',
'/': '%2F',
'<': '%3C',
'>': '%3E'
};
str = str.replace(/([@*+/]|&(amp|lt|gt);)/g, function (m) { return symbols[m]; });
Run Code Online (Sandbox Code Playgroud)
方便的是,这也避免了原来的问题。
归档时间: |
|
查看次数: |
11017 次 |
最近记录: |