【问题标题】:How to convert String with ' convert to standard charater [duplicate]如何将带有'的字符串转换为标准字符[重复]
【发布时间】:2017-03-25 00:38:56
【问题描述】:

我目前遇到的问题是我从数据库中收到了一个字符串,其中 ascii 与字符串混合在一起。我想知道如何创建一个转换函数来将字符串更改为下面的输出。

var string = 'Mc'Dought'; 

在网页上输出 Mc'dought 的最终结果。

function convert(str){
//Code Here
}

【问题讨论】:

    标签: javascript string ascii


    【解决方案1】:

    小心你的要求。

    您正在查看单引号的转义序列。如果你把它扔到页面上,它就会正常显示。

    另一方面,如果您坚持将其转换为实际的单引号字符,则可能会遇到问题。

    查看这段代码 sn-p 看看结果:

    <INPUT Value="Mc&#039;Dought">
    <BR>
    <INPUT Value="Mc'Dought">
    <BR>
    <SPAN>Mc&#039;Dought</SPAN>
    <BR>
    <SPAN>Mc'Dought</SPAN>
    <BR>
    <INPUT Value='Mc'Dought'>  <!-- Problems!!  -->
    <BR>
    <SPAN>Mc'Dought</SPAN>

    但是,如果您了解所有这些并且仍然想取消转义(例如,您需要使用字符串来设置窗口title 或发出alert),我建议您使用公认的 HTML-unescape方法,而不是仅仅替换 '。见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(/&amp;/g, '&')
            .replace(/&lt;/g, '<')
            .replace(/&gt;/g, '>')
            .replace(/&quot;/g, '"')
            .replace(/&#039;/g, "'");
    }
    

    【讨论】:

    • 纯脚本版本比它需要的复杂得多。用正则表达式解析 HTML 是not recommended.
    【解决方案2】:

    String#replace 与正则表达式和替换函数一起使用。您可以使用正则表达式从每个 HTML 实体中解析字符代码,然后调用 String.fromCharCode 将每个代码转换为其字符形式:

    var string = 'Mc&#039;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))

    【讨论】:

    • 如果您要解析的内容不是正则表达式,则正则表达式并不是特别适合解析。在这种情况下,它可能是但通常不是(例如解析 HTML)。
    • 鉴于 OP 的输入字符串,这种方法看起来足够合适,尽管我知道当您开始添加标签、内联样式和脚本等时,HTML 解析更加细微。鉴于您已经标记这个问题是重复的,我可能最终还是会删除这个答案。
    猜你喜欢
    • 2012-05-19
    • 2012-01-26
    • 2011-03-29
    • 2011-03-31
    • 1970-01-01
    • 2020-07-30
    • 2011-01-12
    相关资源
    最近更新 更多