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)
对我来说,链接replaces 并不是很优雅。我会尝试:
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 次 |
| 最近记录: |