在javascript中编码html实体


100

我在允许用户输入内容的CMS中工作。问题在于,当他们添加符号时®,它可能无法在所有浏览器中正常显示。我想设置一个必须搜索的符号列表,然后将其转换为相应的html实体。例如

®=> ®
&=> &
©=> ©
™=>™

转换后,需要将其包装在<sup>标签中,从而导致:

® => <sup>&reg;</sup>

因为必须使用特定的字体大小和填充样式:

sup { font-size: 0.6em; padding-top: 0.2em; }

JavaScript会是这样吗?

var regs = document.querySelectorAll('®');
  for ( var i = 0, l = imgs.length; i < l; ++i ) {
  var [?] = regs[i];
  var [?] = document.createElement('sup');
  img.parentNode.insertBefore([?]);
  div.appendChild([?]);
}

“ [?]”表示我不确定。

额外细节:

  • 我想使用纯JavaScript来做到这一点,而不是需要像jQuery这样的库的东西,谢谢。
  • 后端是Ruby
  • 使用Ruby on Rails构建的RefineryCMS

你的后端是什么?如果它是php,则有一些函数可以为您解决这个问题,并且我相信其他语言也可以使用它们。此外,Google:developwithstyle.com/articles/2010/06/29/…–
克里斯·贝克

5
更好的解决方案可能是接受并输出UTF-8编码的文本。当今使用的每个浏览器都支持UTF-8。在HTML方面,您想添加accept-charset="UTF-8"<form>代码中。在服务器上,您需要确保输出是UTF-8编码的,并且您的Web服务器(通过Content-Type标头)告诉浏览器它是。请参阅rentzsch.tumblr.com/post/9133498042/…如果执行所有操作,并且浏览器无法正确显示字符,则用实体替换字符不会有任何区别。
Paul D. Waite 2013年

@Chris在使用Ruby on Rails构建的CMS中工作。
JGallardo 2013年

在客户端JavaScript中将字符更改为HTML实体引用是错误的,因为客户端JavaScript在不存在实体的DOM上运行。将“®”包装到sup元素中往往会引起更多无法解决的问题,因为在许多字体中,“®”都很小且位于下标位置,因此您可以将其减少到无法识别的程度。
Jukka K. Korpela 2013年

@ JukkaK.Korpela,因此考虑到我需要解决的问题是某些html实体将无法正确显示,您将如何解决呢?<sup>由于我已经测试了博客文章所使用的特定字体,所以换行不是问题,但这是一个不错的考虑点。
JGallardo 2013年

Answers:


176

您可以使用regex将给定unicode范围内的任何字符替换为其html实体等效项。代码看起来像这样:

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/g, function(i) {
   return '&#'+i.charCodeAt(0)+';';
});

此代码将用其html实体等效项替换给定范围内的所有字符(unicode 00A0-9999,以及&符,大于和小于),这就是我们从中获得的unicode值&#nnn;在哪里。nnncharCodeAt

在此处查看其运行情况:http : //jsfiddle.net/E3EqX/13/(此示例将jQuery作为示例中使用的元素选择器。上面的基本代码本身未使用jQuery)

进行这些转换并不能解决所有问题-请确保您使用的是UTF8字符编码,请确保您的数据库将字符串存储在UTF8中。您仍然可能会看到某些字符无法正确显示的情况,具体取决于系统字体配置和您无法控制的其他问题。

文献资料


非常感谢您的jsfiddle。因此要实现这一点。我可以将其添加到我的.js文件中,然后添加其他内容以<sup>
JGallardo 2013年

2
@JGallardo我重新编写了该示例,因此它添加了sup标签(或任何其他标签),并且包含在一个函数中:jsfiddle.net/E3EqX/4。要使用此功能,您需要将“ encodeAndWrap”功能复制到您的项目中。
克里斯·贝克

1
@Chris感谢您提供简洁的代码段,尽管它确实存在一个错误:“ [\ u00A0- \ u99999]”并没有达到您的期望,而是等于“ [\ u00A0- \ u9999] | 9 “-即 字符“ 9”也将错误地替换为HTML实体。您也可以在小提琴中尝试。我会为该问题提出一个解决方案。
SB 2014年

1
尽管我同意@mathias Bynens的答案更为完整,但他的解决方案为84KB,这使我继续寻找替代方案。这似乎可以,但是可以包含<65以及> 90 && <97之间的charCode吗?
Florian Mertens 2014年

1
@mickmackusa习惯上包含在内,毫无意义。
克里斯·贝克

63

当前接受的答案有几个问题。这篇文章解释了它们,并提供了更强大的解决方案。该答案中建议的解决方案以前有:

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
  return '&#' + i.charCodeAt(0) + ';';
});

i标记是多余的,因为从U + 00A0到U + 9999的范围内没有Unicode符号具有大写/小写变体,而该变体不在该同一范围内。

m,因为标志是冗余的^或者$未在正则表达式使用。

为什么范围从U + 00A0到U + 9999?似乎是任意的。

无论如何,对于一种解决方案,该解决方案可以正确编码输入中除安全和可打印的ASCII符号之外的所有字符(包括星号!),并实现所有命名的字符引用(不仅限于HTML4中的字符引用),请使用he(免责声明:该库属于我的库) )。从其自述文件:

(对于“ HTML实体”)是用JavaScript编写的健壮的HTML实体编码器/解码器。它支持HTML格式的所有标准化命名字符引用像浏览器一样处理歧义的“&”号和其他边缘情况,具有广泛的测试套件,并且-与许多其他JavaScript解决方案相反-可以很好地处理星形Unicode符号。提供在线演示。

另请参阅此相关的堆栈溢出答案


12
此外,HE库为... 84KB!Autch ...尝试通过较小的连接将其下载到手机上。妥协要作出什么地方..
弗洛里安·梅尔滕斯

1
@FlorianMertens缩小+ gzip后,约为24 KB。那仍然很大,但是到了最后,如果您想正确地解码HTML实体,您将需要它们上的所有数据-无法解决。如果您找到一种在不影响性能的情况下缩小库的方法,请提交请求请求。
Mathias Bynens 2014年

2
@MathiasBynens,毫无疑问,您的图书馆不错,但是您可以使用注释框突出显示已接受的答案中的问题,请在代码段中提交改进的答案
diEcho

3
@drzaus图像可以变大,因为它们可以存储大量数据,而较少的压缩数据可以更快地进行解码。但是程序代码不同,通常会添加整个库,而很少使用它。库的代码有时包含比您自己的代码更多的行!再加上很少有人会费心查找/调试库问题并发送错误报告(甚至更新库),因此内存泄漏或其他问题可能在具有许多未经检查代码的库的软件中持续存在。如果有人只想对不安全的html字符进行编码/转义,则只需要几行,而不是80kb。
bryc

1
@MarcoKlein是的,我在帖子中对此进行了解释。越野车代码段确实是一个问题。我指向的解决方案没有这个问题。(请参阅“包括星体符号!”)
Mathias Bynens

29

我遇到了同样的问题,并创建了2个函数来创建实体并将其转换回普通字符。以下方法将任何字符串转换为HTML实体,然后再返回String原型

/**
 * Convert a string to HTML entities
 */
String.prototype.toHtmlEntities = function() {
    return this.replace(/./gm, function(s) {
        // return "&#" + s.charCodeAt(0) + ";";
        return (s.match(/[a-z0-9\s]+/i)) ? s : "&#" + s.charCodeAt(0) + ";";
    });
};

/**
 * Create string from HTML entities
 */
String.fromHtmlEntities = function(string) {
    return (string+"").replace(/&#\d+;/gm,function(s) {
        return String.fromCharCode(s.match(/\d+/gm)[0]);
    })
};

然后可以按以下方式使用它:

var str = "Test´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æøπ£¨ ƒ™en tést".toHtmlEntities();
console.log("Entities:", str);
console.log("String:", String.fromHtmlEntities(str));

在控制台中输出:

Entities: &#68;&#105;&#116;&#32;&#105;&#115;&#32;&#101;&#180;&#8224;&#174;&#165;&#168;&#169;&#729;&#8747;&#248;&#8230;&#710;&#402;&#8710;&#247;&#8721;&#8482;&#402;&#8710;&#230;&#248;&#960;&#163;&#168;&#160;&#402;&#8482;&#101;&#110;&#32;&#116;&#163;&#101;&#233;&#115;&#116;
String: Dit is e´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æøπ£¨ ƒ™en t£eést 

该解决方案也可以在tvOS上运行,因此可以在所有情况下解决编码问题。
loretoparisi 2015年

4
那不是很极端吗?您正在将所有内容都转换为HTML实体,甚至是“安全”字符,例如“ abc”,“ 123” ...甚至是空格
-AJPerez

1
这是一个不好的答案。网络上50%+的文档主要包含带有一些utf-8的latin1。您对安全字符的编码会将其大小增加500%至600%,而没有任何好处。
HoldOffHunger

m在没有锚点的模式中说明模式修改器的用途。因此,您的意思是s用于包含点的图案吗?
mickmackusa

18

没有任何库,如果不需要支持IE <9,则可以创建一个html元素,并使用Node.textContent设置其内容:

var str = "<this is not a tag>";
var p = document.createElement("p");
p.textContent = str;
var converted = p.innerHTML;

这是一个示例:https : //jsfiddle.net/1erdhehv/


2
为什么不使用innerText而不是textContent?
里克

@Rick,为答案中链接的textContent提供MDN文档。引用为“ textContent和HTMLElement.innerText很容易混淆,但是两个属性在重要方面有所不同。”
阿达沙

17

您可以使用它。

var escapeChars = {
  '¢' : 'cent',
  '£' : 'pound',
  '¥' : 'yen',
  '€': 'euro',
  '©' :'copy',
  '®' : 'reg',
  '<' : 'lt',
  '>' : 'gt',
  '"' : 'quot',
  '&' : 'amp',
  '\'' : '#39'
};

var regexString = '[';
for(var key in escapeChars) {
  regexString += key;
}
regexString += ']';

var regex = new RegExp( regexString, 'g');

function escapeHTML(str) {
  return str.replace(regex, function(m) {
    return '&' + escapeChars[m] + ';';
  });
};

https://github.com/epeli/underscore.string/blob/master/escapeHTML.js

var htmlEntities = {
    nbsp: ' ',
    cent: '¢',
    pound: '£',
    yen: '¥',
    euro: '€',
    copy: '©',
    reg: '®',
    lt: '<',
    gt: '>',
    quot: '"',
    amp: '&',
    apos: '\''
};

function unescapeHTML(str) {
    return str.replace(/\&([^;]+);/g, function (entity, entityCode) {
        var match;

        if (entityCode in htmlEntities) {
            return htmlEntities[entityCode];
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
            return String.fromCharCode(parseInt(match[1], 16));
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#(\d+)$/)) {
            return String.fromCharCode(~~match[1]);
        } else {
            return entity;
        }
    });
};

4
手动添加可编码字符的随机子集可能会给您自己和同事带来麻烦。应该有一个用于编码字符的单一权限,可能是浏览器,否则可能是一个可能是全面和维护的特定库。
user234461 '19

好点,@ user234461。如果有人发现了这种权威,那么像我这样的人就很想知道!
idungotnosn

7

如果您想避免对html实体进行多次编码

function encodeHTML(str){
    return str.replace(/([\u00A0-\u9999<>&])(.|$)/g, function(full, char, next) {
      if(char !== '&' || next !== '#'){
        if(/[\u00A0-\u9999<>&]/.test(next))
          next = '&#' + next.charCodeAt(0) + ';';

        return '&#' + char.charCodeAt(0) + ';' + next;
      }

      return full;
    });
}

function decodeHTML(str){
    return str.replace(/&#([0-9]+);/g, function(full, int) {
        return String.fromCharCode(parseInt(int));
    });
}

#示例

var text = "<a>Content &#169; <#>&<&#># </a>";

text = encodeHTML(text);
console.log("Encode 1 times: " + text);

// &#60;a&#62;Content &#169; &#60;#&#62;&#38;&#60;&#38;#&#62;# &#60;/a&#62;

text = encodeHTML(text);
console.log("Encode 2 times: " + text);

// &#60;a&#62;Content &#169; &#60;#&#62;&#38;&#60;&#38;#&#62;# &#60;/a&#62;

text = decodeHTML(text);
console.log("Decoded: " + text);

// <a>Content © <#>&<&#># </a>

这仅在您有混合的部分转义文本开始时才有用,并且由于无法正确编码所有字符串而引入了错误:<#>出来为<#&#62;
Rick

@Rick感谢您通知我,我已经更新了答案,使其变得更好。
StefansArya

4

HTML特殊字符及其 ESCAPE CODES

保留的字符必须通过HTML进行转义:我们可以使用字符转义来仅使用ASCII字符来表示HTML,XHTML或XML中的任何Unicode字符[Ex:&-U + 00026]。数字字符引用[ Ex:和号&#38;]和命名字符引用[Ex:&amp;]是的类型character escape used in markup


预定义实体

    Original Character     XML entity replacement    XML numeric replacement  
                  <                                    &lt;                                           &#60;                    
                  >                                     &gt;                                         &#62;                    
                  "                                     &quot;                                      &#34;                    
                  &                                   &amp;                                       &#38;                    
                   '                                    &apos;                                      &#39;                    

要将HTML标签以普通形式显示在网页中<pre><code>我们可以使用,标签,也可以对其进行转义。通过用字符串替换任何出现的"&"字符"&amp;"和用字符串替换任何出现的字符来转义">"字符串"&gt;"。例如:stackoverflow post

function escapeCharEntities() {
    var map = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        "\"": "&quot;",
        "'": "&apos;"
    };
    return map;
}

var mapkeys = '', mapvalues = '';
var html = {
    encodeRex : function () {
        return  new RegExp(mapkeys, 'gm');
    }, 
    decodeRex : function () {
        return  new RegExp(mapvalues, 'gm');
    },
    encodeMap : JSON.parse( JSON.stringify( escapeCharEntities () ) ),
    decodeMap : JSON.parse( JSON.stringify( swapJsonKeyValues( escapeCharEntities () ) ) ),
    encode : function ( str ) {
        return str.replace(html.encodeRex(), function(m) { return html.encodeMap[m]; });
    },
    decode : function ( str ) {
        return str.replace(html.decodeRex(), function(m) { return html.decodeMap[m]; });
    }
};

function swapJsonKeyValues ( json ) {
    var count = Object.keys( json ).length;
    var obj = {};
    var keys = '[', val = '(', keysCount = 1;
    for(var key in json) {
        if ( json.hasOwnProperty( key ) ) {
            obj[ json[ key ] ] = key;
            keys += key;
            if( keysCount < count ) {
                val += json[ key ]+'|';
            } else {
                val += json[ key ];
            }
            keysCount++;
        }
    }
    keys += ']';    val  += ')';
    console.log( keys, ' == ', val);
    mapkeys = keys;
    mapvalues = val;
    return obj;
}

console.log('Encode: ', html.encode('<input type="password" name="password" value=""/>') ); 
console.log('Decode: ', html.decode(html.encode('<input type="password" name="password" value=""/>')) );

O/P:
Encode:  &lt;input type=&quot;password&quot; name=&quot;password&quot; value=&quot;&quot;/&gt;
Decode:  <input type="password" name="password" value=""/>

这非常适合将Json格式的html源代码添加到iframe srcdoc字符串中。
Nime Cloud

它不包括®,因此不会对OP有所帮助。此外,此JS比许多其他解决方案复杂得多,即使是仅使用此类简短映射的解决方案也是如此。swapJsonKeyValues的命名很差,因为它具有所需的副作用(定义mapkey和mapvalues)
Rick

m在没有锚点的样式中说明样式修改器的用途。
mickmackusa

3
var htmlEntities = [
            {regex:/&/g,entity:'&amp;'},
            {regex:/>/g,entity:'&gt;'},
            {regex:/</g,entity:'&lt;'},
            {regex:/"/g,entity:'&quot;'},
            {regex:/á/g,entity:'&aacute;'},
            {regex:/é/g,entity:'&eacute;'},
            {regex:/í/g,entity:'&iacute;'},
            {regex:/ó/g,entity:'&oacute;'},
            {regex:/ú/g,entity:'&uacute;'}
        ];

total = <some string value>

for(v in htmlEntities){
    total = total.replace(htmlEntities[v].regex, htmlEntities[v].entity);
}

阵列解决方案


3
请解释如何以一种比上面更好的独特方式解决问题。乍一看,这种解决方案似乎比较慢,因为它以多次传递而不是一次全部修改字符串。但是,我可能不正确。无论哪种方式,您都必须备份并附带说明。
杰克·吉芬

它是一种替代方法,您可以直接从数组中使用正则表达式...:D
Cesar De la Cruz

这是每个字符的一个正则表达式(对于...中的v)。如果您想涵盖所有UTF-8,则将是65,000个正则表达式和65,000条执行行。
HoldOffHunger

2
我只想将三个字符转换为实体,所以这个答案对我来说更好,我很高兴在这里
Drew

2

如果您已经在使用jQuery,请尝试html()

$('<div>').text('<script>alert("gotcha!")</script>').html()
// "&lt;script&gt;alert("gotcha!")&lt;/script&gt;"

实例化内存中的文本节点,并对其html()进行调用。

这很丑陋,浪费了一些内存,而且我不知道它是否像he库一样彻底,但是如果您已经在使用jQuery,也许这是您的选择。

摘自FelixGeisendörfer的博客文章“使用jQuery编码HTML实体”


3
为避免每次实例化一个节点,您可以保存该节点:var converter=$("<div>");并在以后重新使用它:html1=converter.text(text1).html(); html2=converter.text(text2).html();...
FrancescoMM

1

有时,您只想对每个字符进行编码...此函数替换了regxp中的“所有内容,但没有内容”。

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}


1
替换^.以保存表情符号:function encode(e){return e.replace(/[.]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}
瑞士先生

1

从Ourcodeworld Ourcodeworld中检出本教程 -使用javascript编码和解码html实体

最重要的是he库示例

he.encode('foo © bar ≠ baz ???? qux');
// → 'foo &#xA9; bar &#x2260; baz &#x1D306; qux'

// Passing an `options` object to `encode`, to explicitly encode all symbols:
he.encode('foo © bar ≠ baz ???? qux', {
 'encodeEverything': true
});

he.decode('foo &copy; bar &ne; baz &#x1D306; qux');
// → 'foo © bar ≠ baz ???? qux'

该库可能会使您的编码更容易并且可以更好地管理。它很受欢迎,会定期更新并遵循HTML规范。它本身没有依赖项,如package.json中所示


OP要求使用Vanilla JS,而Vanilla JS提供了element.innerText。如果图书馆有优势,请将其添加到您的答案中。
瑞克

0

这是我实现编码的方式。我从上面给出的答案中得到了启发。

function encodeHTML(str) {
  const code = {
      ' ' : '&nbsp;',
      '¢' : '&cent;',
      '£' : '&pound;',
      '¥' : '&yen;',
      '€' : '&euro;', 
      '©' : '&copy;',
      '®' : '&reg;',
      '<' : '&lt;', 
      '>' : '&gt;',  
      '"' : '&quot;', 
      '&' : '&amp;',
      '\'' : '&apos;'
  };
  return str.replace(/[\u00A0-\u9999<>\&''""]/gm, (i)=>code[i]);
}

// TEST
console.log(encodeHTML("Dolce & Gabbana"));
console.log(encodeHTML("Hamburgers < Pizza < Tacos"));
console.log(encodeHTML("Sixty > twelve"));
console.log(encodeHTML('Stuff in "quotation marks"'));
console.log(encodeHTML("Schindler's List"));
console.log(encodeHTML("<>"));


中断\ u00A0- \ u9999中未包含在列表中的任何输入
Rick

m在没有锚点的模式中说明模式修改器的用途。
mickmackusa

-1

您可以使用该charCodeAt()方法检查指定字符的值是否大于127,然后使用将其转换为数字字符引用toString(16)


4
如果您可以增加一些关于幻数127以及此工作方式/原因的信息,将会很好;)
yckart 2015年

-1
replaceHtmlEntities(text) {
  var tagsToReplace = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
  };
  var newtext = text;
  for (var tag in tagsToReplace) {
    if (Reflect.apply({}.hasOwnProperty, this, [tagsToReplace, tag])) {
      var regex = new RegExp(tag, 'g');
      newtext = newtext.replace(regex, tagsToReplace[tag]);
    }
  }
  return newtext;
}

-1

<!DOCTYPE html>
<html>
<style>
button {
backround: #ccc;
padding: 14px;
width: 400px;
font-size: 32px;
}
#demo {
font-size: 20px;
font-family: Arial;
font-weight: bold;
}
</style>
<body>

<p>Click the button to decode.</p>

<button onclick="entitycode()">Html Code</button>

<p id="demo"></p>


<script>
function entitycode() {
  var uri = "quotation  = ark __ &apos; = apostrophe  __ &amp; = ampersand __ &lt; = less-than __ &gt; = greater-than __ 	non- = reaking space __ &iexcl; = inverted exclamation mark __ &cent; = cent __ &pound; = pound __ &curren; = currency __ &yen; = yen __ &brvbar; = broken vertical bar __ &sect; = section __ &uml; = spacing diaeresis __ &copy; = copyright __ &ordf; = feminine ordinal indicator __ &laquo; = angle quotation mark (left) __ &not; = negation __ &shy; = soft hyphen __ &reg; = registered trademark __ &macr; = spacing macron __ &deg; = degree __ &plusmn; = plus-or-minus  __ &sup2; = superscript 2 __ &sup3; = superscript 3 __ &acute; = spacing acute __ &micro; = micro __ &para; = paragraph __ &middot; = middle dot __ &cedil; = spacing cedilla __ &sup1; = superscript 1 __ &ordm; = masculine ordinal indicator __ &raquo; = angle quotation mark (right) __ &frac14; = fraction 1/4 __ &frac12; = fraction 1/2 __ &frac34; = fraction 3/4 __ &iquest; = inverted question mark __ &times; = multiplication __ &divide; = division __ &Agrave; = capital a, grave accent __ &Aacute; = capital a, acute accent __ &Acirc; = capital a, circumflex accent __ &Atilde; = capital a, tilde __ &Auml; = capital a, umlaut mark __ &Aring; = capital a, ring __ &AElig; = capital ae __ &Ccedil; = capital c, cedilla __ &Egrave; = capital e, grave accent __ &Eacute; = capital e, acute accent __ &Ecirc; = capital e, circumflex accent __ &Euml; = capital e, umlaut mark __ &Igrave; = capital i, grave accent __ &Iacute; = capital i, acute accent __ &Icirc; = capital i, circumflex accent __ &Iuml; = capital i, umlaut mark __ &ETH; = capital eth, Icelandic __ &Ntilde; = capital n, tilde __ &Ograve; = capital o, grave accent __ &Oacute; = capital o, acute accent __ &Ocirc; = capital o, circumflex accent __ &Otilde; = capital o, tilde __ &Ouml; = capital o, umlaut mark __ &Oslash; = capital o, slash __ &Ugrave; = capital u, grave accent __ &Uacute; = capital u, acute accent __ &Ucirc; = capital u, circumflex accent __ &Uuml; = capital u, umlaut mark __ &Yacute; = capital y, acute accent __ &THORN; = capital THORN, Icelandic __ &szlig; = small sharp s, German __ &agrave; = small a, grave accent __ &aacute; = small a, acute accent __ &acirc; = small a, circumflex accent __ &atilde; = small a, tilde __ &auml; = small a, umlaut mark __ &aring; = small a, ring __ &aelig; = small ae __ &ccedil; = small c, cedilla __ &egrave; = small e, grave accent __ &eacute; = small e, acute accent __ &ecirc; = small e, circumflex accent __ &euml; = small e, umlaut mark __ &igrave; = small i, grave accent __ &iacute; = small i, acute accent __ &icirc; = small i, circumflex accent __ &iuml; = small i, umlaut mark __ &eth; = small eth, Icelandic __ &ntilde; = small n, tilde __ &ograve; = small o, grave accent __ &oacute; = small o, acute accent __ &ocirc; = small o, circumflex accent __ &otilde; = small o, tilde __ &ouml; = small o, umlaut mark __ &oslash; = small o, slash __ &ugrave; = small u, grave accent __ &uacute; = small u, acute accent __ &ucirc; = small u, circumflex accent __ &uuml; = small u, umlaut mark __ &yacute; = small y, acute accent __ &thorn; = small thorn, Icelandic __ &yuml; = small y, umlaut mark";
  var enc = encodeURI(uri);
  var dec = decodeURI(enc);
  var res = dec;
  document.getElementById("demo").innerHTML = res;
}
</script>

</body>
</html>


这似乎无法回答问题,而只是代码的回答。请提供有关代码的功能及其与问题的关系的描述。
瑞克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.