Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中替换字符串中的多个字符_Javascript_Html_Variables_Cookies_Replace - Fatal编程技术网

在javascript中替换字符串中的多个字符

在javascript中替换字符串中的多个字符,javascript,html,variables,cookies,replace,Javascript,Html,Variables,Cookies,Replace,我得到了这个很好的代码,我不知道为什么它不起作用。它应该获得文本输入的值,并用它的HTML代码替换每个给定的国家字符,以实现兼容性。但是,当我单击按钮时,该函数返回字符串而不做任何更改。 有什么想法吗 () 设置提醒 函数csere(qwe){ document.getElementById('member2').style.display='none'; var rtz0=qwe.替换(“á”、“á;”); 变量rtz1=rtz0。替换(“Á”和“Á;”); var

我得到了这个很好的代码,我不知道为什么它不起作用。它应该获得文本输入的值,并用它的HTML代码替换每个给定的国家字符,以实现兼容性。但是,当我单击按钮时,该函数返回字符串而不做任何更改。 有什么想法吗

()


设置提醒
函数csere(qwe){
document.getElementById('member2').style.display='none';
var rtz0=qwe.替换(“á”、“á;”);
变量rtz1=rtz0。替换(“Á”和“Á;”);
var rtz2=rtz1.替换(“é”、“é;”);
var rtz3=rtz2。替换(“É”和“É;”);
var rtz4=rtz3.替换(“í”、“í;”);
var rtz5=rtz4.替换(“Í”和“Í;”);
var rtz6=rtz5.替换(“ö”、“ö;”);
var rtz7=rtz6。替换(“Ö”和“Ö;”);
var rtz8=rtz7。替换(“ő”、“&&&&337;”;
var rtz9=rtz8.替换(“Ő”和“&336;”);
var rtz10=rtz9。替换(“ó”、“ó;”);
变量rtz11=rtz10。替换(“Ó”和“Ó;”);
var rtz12=rtz11。替换(“u”和“ü;”);
变量rtz13=rtz12。替换(“Ü”、“Uuml;”);
变量rtz14=rtz13。替换(“ű”、“ű;”;
变量rtz15=rtz14。替换(“Ű”、“Ű;”;
变量rtz16=rtz15。替换(“ú”和“ú;”);
var uio=rtz16。替换(“Ú”和“Ú;”);
//创建具有最终值的cookie(不同的函数)
createCookie(“提醒”,uio,1500);
document.getElementById('member1')。style.display='';
}

我认为您在仅替换字符的第一个实例时遇到了问题。在javascript中,必须使用正则表达式指定全局替换,如下所示:

var rtz0  = qwe.replace(new RegExp("á", "g"), "á");
qwe  = qwe.replace(new RegExp("á", "g"), "á");
qwe  = qwe.replace(new RegExp("Á", "g"), "Á");
最好按照PPvG或jackwanders所述创建一个数组,但至少要重用现有变量。您可以很容易地这样做:

var rtz0  = qwe.replace(new RegExp("á", "g"), "á");
qwe  = qwe.replace(new RegExp("á", "g"), "á");
qwe  = qwe.replace(new RegExp("Á", "g"), "Á");

您可以为每个要替换的字符创建具有键/值对的对象:

var chars = {
    "á" : "á",
    "Á" : "Á",
    "é" : "é",
    "É" : "É",
    ...
}
然后在
调用中使用函数。替换
调用:

var uio = qwe.replace(/[áÁéÉ]/g,function(c) { return chars[c]; });

您的对象和正则表达式显然需要增长,以包含所有要替换的字符。这些字符受HTML页面、JavaScript页面和HTTP请求编码的约束。尝试将字符替换为其Unicode等效项:

<a id="reminder1" onclick="document.getElementById('reminder2').style.display = ''; document.getElementById('reminder1').style.display = 'none';">
    Set reminder
</a>
<a id="reminder2" class="reminder" style="display:none;">
    <input type="text" id="reminderh" size=40 style="font-size:20px;">
    <input type="button" value="Set" onclick="csere(document.getElementById('reminderh').value);">
</a>

<script>
function csere(qwe){
document.getElementById('reminder2').style.display = 'none';

var rtz0  = qwe.replace(/\u00E1/,"&aacute;");
var rtz1  = rtz0.replace(/\u00C1/,"&Aacute;");

var rtz2  = rtz1.replace(/\u00E9/,"&eacute;");
var rtz3  = rtz2.replace(/\u00C9/,"&Eacute;");

var rtz4  = rtz3.replace(/\u00ED/,"&iacute;");
var rtz5  = rtz4.replace(/\u00CD/,"&Iacute;");

var rtz6  = rtz5.replace(/\u00F6/,"&ouml;");
var rtz7  = rtz6.replace(/\u00D6/,"&Ouml;");
var rtz8  = rtz7.replace(/\u00F5/,"&&#337;");
var rtz9  = rtz8.replace(/\u00D5/,"&#336;");
var rtz10 = rtz9.replace(/\u00F3/,"&oacute;");
var rtz11 = rtz10.replace(/\u00D3/,"&Oacute;");

var rtz12 = rtz11.replace(/\u00FC/,"&uuml;");
var rtz13 = rtz12.replace(/\u00DC/,"&Uuml;");
var rtz14 = rtz13.replace(/\u0171/,"&#369;");
var rtz15 = rtz14.replace(/\u0170/,"&#368;");
var rtz16 = rtz15.replace(/\u00FA/,"&uacute;");
var uio = rtz16.replace(/\u00DA/,"&Uacute;");

//Creates a cookie with the final value (different function)
createCookie('reminder',uio,1500);

document.getElementById('reminder1').style.display = '';
}
</script>

您可以通过编程实现一切,而不使用命名实体:

return input.replace(/[^ -~]/g, function(chr) {
//                    ^^^^^^ 
// this is a regexp for "everything than printable ASCII-characters"
// and even works in a ASCII-only charset. Identic: [^\u0020-\u007E]
    return "&#"+chr.charCodeAt(0)+";";
});
如果要使用命名实体,可以将其与键值映射相结合(如@jackwanders answer中所示):



但是,您永远不需要在JavaScript中使用html实体。使用UTF8作为所有内容的字符编码,它会起作用。

对我有效(我使用了
console.log
),在完成所有替换后,您从未将值分配回元素。事实证明,我实际上并不需要UTF编码。我只是在使用它,因为整个网站都在使用它,我认为这是必要的。基本上,我不需要代码来替换国家字符,因为即使没有它,它们看起来也很好。正如我所说,这个方法再次返回原样的值,并且不做任何处理。@DJDavid98我同意这似乎不是它不替换的原因,但是您需要按照我的建议进行全局替换。我还强烈建议使用PPvG和jackwanders提到的数组。问题是字符的格式不正确,无法识别,切换到unicode解决了这个问题。@DJDavid98我注意到了。但是,如果一个字符被多次使用,那么当前代码将只删除该字符的第一个实例,并且使用数组将大大减少代码量。Josh,String.replace()方法不需要正则表达式。一根绳子就可以了。看这里:是的!谢谢,看起来Unicode替代品解决了这个问题。如果这是一个解决方案,那么您应该修复您的编码。无论如何,你应该改进你的算法,看看jackwanders的答案或者我的答案。这只会替换每个字符的第一个实例。下面是一个例子:在代码的第二部分中,使用@jackwanders answer,如何放置字符?如果我尝试使用/\u00E1/格式,会出现错误。您在哪里使用该格式?如果仍然存在错误编码,则需要转义map对象的键。