Javascript替换字符*、+;,和/或在一个字符串内
好的,我现在正在研究一种简单的方式,用JS的escape()和一些字符串替换来模仿PHP的urlencode()函数。我只看键盘字符,所以没有特殊的ASCII或Unicode字符。我遇到的问题是,特定的字符*、+、和/在RegExp中都有特殊的含义,而且由于JavaScript字符串对象方法使用RegExp参数,我无法完全复制PHP的urlencode()。因此,如何使用JS替换字符串中的这些字符 背景信息:Javascript替换字符*、+;,和/或在一个字符串内,javascript,special-characters,replace,Javascript,Special Characters,Replace,好的,我现在正在研究一种简单的方式,用JS的escape()和一些字符串替换来模仿PHP的urlencode()函数。我只看键盘字符,所以没有特殊的ASCII或Unicode字符。我遇到的问题是,特定的字符*、+、和/在RegExp中都有特殊的含义,而且由于JavaScript字符串对象方法使用RegExp参数,我无法完全复制PHP的urlencode()。因此,如何使用JS替换字符串中的这些字符 背景信息: escape()与urlencode()不一致: @:未转换,应为%40 &:被视为h
escape()与urlencode()不一致:
@
:未转换,应为%40
&
:被视为html实体,因此被转义为%26amp%3B,而不是%26
*
:未转换,应为%2A
+
:未转换,应为%2B
/
:未转换,应为%2F
:被视为html实体,因此被转义为%26gt%3B,而不是%3E
HTML实体转换非常简单
str.replace(/&/g, '%26').replace(/</g, '%3C').replace(/>/g, '%3E');
和@
可以替换,因为它不是保留的RegExp字符。*
表示有条件的{0}
+
表示有条件的{1}
/
是基本的RegExp标记字符
感谢您抽出时间。您可以始终使用良好的ole字符串数组访问
var myString = "Hello this is a string. * It contains an asterisk.";
for(var i = 0; i < myString.length; i++)
{
if(myString[i] == '*')
{
alert(i);
}
}
var myString=“您好,这是一个字符串。*它包含一个星号。”;
for(var i=0;i
是否有理由不在正则表达式中用反斜杠转义*、+、和/字符
s = s.replace( /\*/g, 'star' );
对我来说,链接
replace
s不是很优雅。我会尝试:
var symbols = {
'@': '%40',
'&': '%26',
'*': '%2A',
'+': '%2B',
'/': '%2F',
'<': '%3C',
'>': '%3E'
};
str = str.replace(/([@*+/]|&(amp|lt|gt);)/g, function (m) { return symbols[m]; });
方便地说,这也避免了原来的问题。很抱歉,我没有使用相同的帐户,但为了回应所有问题,下面是: Plunkett先生,不管出于什么原因(可能是由于保留字符的状态),在这种情况下,转义字符实际上不起作用。我忘了提到我试图逃离他们xD 霍普先生,谢谢你的旁路解决方案。我会检查一下,看看它是否有效(应该有效) Mahir(是的,我知道,它可能只是一个if/else if/else if,但这仍然是相当多的代码)。 是的,这已经足够了,因为法国的小城市更受欢迎 关于William的回答,如果您做一些研究,您会注意到encodeURIComponent()实际上并没有对PHP的urlencode()编码的大量字符进行编码。整个问题的目的是在JS中构建urlencode()的简单副本 谢谢大家的回复,非常感谢 --附录--
霍普先生的代码是有效的,只是做了一个调整:
function urlencode(str) {
var symbols = {
'@': '%40',
'%26amp%3B: '%26',
'*': '%2A',
'+': '%2B',
'/': '%2F',
'%26lt%3B': '%3C',
'%26gt%3B': '%3E'
};
return escape(str).replace(/([@*+/]|%26(amp|lt|gt)%3B)/g, function (m) { return symbols[m]; });
}
显然,其他人可能会以不同的方式更改代码以使其正常工作,但对我来说,从替换的百分比符号中消除串扰要方便得多
再次感谢大家。为什么不使用JavaScript内置的encodeURIComponent()函数?它包含一个星号,而不是星号。