我目前遇到的问题是,我收到了数据库中的字符串,其中 ascii 与字符串混合在一起。我想知道如何创建一个转换函数来将字符串更改为下面的输出。
var string = 'Mc'Dought';
在网页上输出Mc&#39的最终结果。
function convert(str){
//Code Here
}
答案 0 :(得分:1)
将String#replace
与正则表达式和替换函数一起使用。您可以使用正则表达式解析每个HTML实体中的字符代码,然后调用String.fromCharCode
将每个代码转换为其字符形式:
var string = 'Mc'Dought'
function convert (string) {
return string.replace(/&#(?:x([\da-f]+)|(\d+));/ig, function (_, hex, dec) {
return String.fromCharCode(dec || +('0x' + hex))
})
}
console.log(convert(string))
答案 1 :(得分:0)
小心你所要求的。
您正在查看单引号的转义序列。如果你将它扔到页面上,它将正确显示。
另一方面,如果您坚持将其转换为实际的单引号字符,则可能会遇到问题。
查看此代码段以查看后果:
<INPUT Value="Mc'Dought">
<BR>
<INPUT Value="Mc'Dought">
<BR>
<SPAN>Mc'Dought</SPAN>
<BR>
<SPAN>Mc'Dought</SPAN>
<BR>
<INPUT Value='Mc'Dought'> <!-- Problems!! -->
<BR>
<SPAN>Mc'Dought</SPAN>
但是,如果你理解了所有这些并且仍然希望对其进行解除(例如,你需要使用字符串来设置窗口title
或发出alert
),我建议你使用接受HTML-unescape方法,而不是仅替换&amp;#039。请参阅this answer。
Jquery的:
function escapeHtml(unsafe) {
return $('<div />').text(unsafe).html()
}
function unescapeHtml(safe) {
return $('<div />').html(safe).text();
}
普通Javascript:
function unescapeHtml(safe) {
return safe.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, "'");
}