Javascript替换字符*、+;,和/或在一个字符串内

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

好的,我现在正在研究一种简单的方式,用JS的escape()和一些字符串替换来模仿PHP的urlencode()函数。我只看键盘字符,所以没有特殊的ASCII或Unicode字符。我遇到的问题是,特定的字符*、+、和/在RegExp中都有特殊的含义,而且由于JavaScript字符串对象方法使用RegExp参数,我无法完全复制PHP的urlencode()。因此,如何使用JS替换字符串中的这些字符

背景信息:
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',
    '&amp;': '%26',
    '*': '%2A',
    '+': '%2B',
    '/': '%2F',
    '&lt;': '%3C',
    '&gt;': '%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()函数?它包含一个星号,而不是星号。