aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/glossary
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/glossary')
-rw-r--r--files/zh-cn/glossary/abstraction/index.html (renamed from files/zh-cn/glossary/抽象编程/index.html)3
-rw-r--r--files/zh-cn/glossary/algorithm/index.html (renamed from files/zh-cn/glossary/算法/index.html)3
-rw-r--r--files/zh-cn/glossary/arpa/index.html (renamed from files/zh-cn/glossary/地址路由参数域/index.html)3
-rw-r--r--files/zh-cn/glossary/asynchronous/index.html (renamed from files/zh-cn/glossary/异步/index.html)3
-rw-r--r--files/zh-cn/glossary/base64/index.html606
-rw-r--r--files/zh-cn/glossary/baseline/index.html (renamed from files/zh-cn/glossary/基线/index.html)3
-rw-r--r--files/zh-cn/glossary/browser/index.html (renamed from files/zh-cn/glossary/浏览器/index.html)3
-rw-r--r--files/zh-cn/glossary/card_sorting/index.html (renamed from files/zh-cn/glossary/卡片分类法/index.html)3
-rw-r--r--files/zh-cn/glossary/character_encoding/index.html (renamed from files/zh-cn/glossary/字符编码/index.html)3
-rw-r--r--files/zh-cn/glossary/compile/index.html (renamed from files/zh-cn/glossary/编译/index.html)3
-rw-r--r--files/zh-cn/glossary/compile_time/index.html (renamed from files/zh-cn/glossary/编译时间/index.html)3
-rw-r--r--files/zh-cn/glossary/cross_axis/index.html (renamed from files/zh-cn/glossary/交叉轴/index.html)3
-rw-r--r--files/zh-cn/glossary/database/index.html (renamed from files/zh-cn/glossary/数据库/index.html)3
-rw-r--r--files/zh-cn/glossary/dhtml/index.html144
-rw-r--r--files/zh-cn/glossary/digital_certificate/index.html (renamed from files/zh-cn/glossary/数字证书/index.html)3
-rw-r--r--files/zh-cn/glossary/domain_name/index.html (renamed from files/zh-cn/glossary/域名/index.html)3
-rw-r--r--files/zh-cn/glossary/dtd/index.html9
-rw-r--r--files/zh-cn/glossary/element/index.html (renamed from files/zh-cn/glossary/元素/index.html)3
-rw-r--r--files/zh-cn/glossary/empty_element/index.html (renamed from files/zh-cn/glossary/空元素/index.html)3
-rw-r--r--files/zh-cn/glossary/forbidden_header_name/index.html (renamed from files/zh-cn/glossary/禁止修改的消息首部/index.html)3
-rw-r--r--files/zh-cn/glossary/general_header/index.html (renamed from files/zh-cn/glossary/通用首部/index.html)3
-rw-r--r--files/zh-cn/glossary/graceful_degradation/index.html (renamed from files/zh-cn/glossary/优雅降级/index.html)3
-rw-r--r--files/zh-cn/glossary/http_header/index.html (renamed from files/zh-cn/glossary/header/index.html)3
-rw-r--r--files/zh-cn/glossary/idempotent/index.html (renamed from files/zh-cn/glossary/幂等/index.html)3
-rw-r--r--files/zh-cn/glossary/iife/index.html (renamed from files/zh-cn/glossary/立即执行函数表达式/index.html)3
-rw-r--r--files/zh-cn/glossary/ip_address/index.html (renamed from files/zh-cn/glossary/ip地址/index.html)3
-rw-r--r--files/zh-cn/glossary/localization/index.html63
-rw-r--r--files/zh-cn/glossary/main_axis/index.html (renamed from files/zh-cn/glossary/主轴/index.html)3
-rw-r--r--files/zh-cn/glossary/oop/index.html (renamed from files/zh-cn/glossary/面向对象编程/index.html)3
-rw-r--r--files/zh-cn/glossary/origin/index.html (renamed from files/zh-cn/glossary/源/index.html)3
-rw-r--r--files/zh-cn/glossary/progressive_enhancement/index.html (renamed from files/zh-cn/glossary/渐进增强/index.html)3
-rw-r--r--files/zh-cn/glossary/proxy_server/index.html (renamed from files/zh-cn/glossary/代理服务器/index.html)3
-rw-r--r--files/zh-cn/glossary/pseudo-class/index.html (renamed from files/zh-cn/glossary/伪类/index.html)3
-rw-r--r--files/zh-cn/glossary/request_header/index.html (renamed from files/zh-cn/glossary/请求头/index.html)3
-rw-r--r--files/zh-cn/glossary/semantics/index.html (renamed from files/zh-cn/glossary/语义/index.html)3
-rw-r--r--files/zh-cn/glossary/serialization/index.html (renamed from files/zh-cn/glossary/serialize/index.html)3
-rw-r--r--files/zh-cn/glossary/simple_header/index.html (renamed from files/zh-cn/glossary/简单头部/index.html)3
-rw-r--r--files/zh-cn/glossary/sloppy_mode/index.html (renamed from files/zh-cn/glossary/正常模式/index.html)3
-rw-r--r--files/zh-cn/glossary/speculative_parsing/index.html30
-rw-r--r--files/zh-cn/glossary/time_to_first_byte/index.html (renamed from files/zh-cn/glossary/第一字节时间/index.html)3
-rw-r--r--files/zh-cn/glossary/type_conversion/index.html (renamed from files/zh-cn/glossary/类型转换/index.html)3
-rw-r--r--files/zh-cn/glossary/xhtml/index.html16
42 files changed, 931 insertions, 45 deletions
diff --git a/files/zh-cn/glossary/抽象编程/index.html b/files/zh-cn/glossary/abstraction/index.html
index a7497bdc94..852893d5ab 100644
--- a/files/zh-cn/glossary/抽象编程/index.html
+++ b/files/zh-cn/glossary/abstraction/index.html
@@ -1,6 +1,6 @@
---
title: 抽象编程
-slug: Glossary/抽象编程
+slug: Glossary/Abstraction
tags:
- 名词解释
- 抽象
@@ -8,6 +8,7 @@ tags:
- 编程脚本
- 编程语言
translation_of: Glossary/Abstraction
+original_slug: Glossary/抽象编程
---
<p>在计算机编程{{Glossary("computer programming")}}领域中,抽象编程指在研发大型复杂软件系统时,通过抽象的方法来降低编程复杂度,实现系统快速高效设计和开发的编程模式。它将系统各功能实现的技术细节隐藏在相对简单的 {{Glossary("API", "APIs")}}之后。</p>
diff --git a/files/zh-cn/glossary/算法/index.html b/files/zh-cn/glossary/algorithm/index.html
index 8dcea73131..205c1f0b1d 100644
--- a/files/zh-cn/glossary/算法/index.html
+++ b/files/zh-cn/glossary/algorithm/index.html
@@ -1,10 +1,11 @@
---
title: 算法
-slug: Glossary/算法
+slug: Glossary/Algorithm
tags:
- 专业术语
- 编程基础
translation_of: Glossary/Algorithm
+original_slug: Glossary/算法
---
<p>算法是一个良定义的具体计算步骤的一个序列。</p>
diff --git a/files/zh-cn/glossary/地址路由参数域/index.html b/files/zh-cn/glossary/arpa/index.html
index 8c30be2d15..034696aa1b 100644
--- a/files/zh-cn/glossary/地址路由参数域/index.html
+++ b/files/zh-cn/glossary/arpa/index.html
@@ -1,10 +1,11 @@
---
title: ARPA
-slug: Glossary/地址路由参数域
+slug: Glossary/ARPA
tags:
- 专业术语
- 互联网服务基础设施
translation_of: Glossary/ARPA
+original_slug: Glossary/地址路由参数域
---
<p><strong>.arpa </strong>(address and routing parameter area, <span style="background-color: #ffffff; color: #222222; display: inline !important; float: none; font-family: sans-serif; font-size: 15.008px; font-style: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal;">地址路由参数域</span> ) 是专门用来<span style="background-color: #ffffff; color: #222222; display: inline !important; float: none; font-family: sans-serif; font-size: 15.008px; font-style: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal;">互联网基础设施配置的</span>顶级域{{glossary("TLD","top-level domain")}} ,尤其是DNS反向解析,即从 {{glossary("IP 地址")}})找出旗下的主机名(i.e., find the {{glossary('domain name')}} 。</p>
diff --git a/files/zh-cn/glossary/异步/index.html b/files/zh-cn/glossary/asynchronous/index.html
index 0bc0353e3d..f00cce8b20 100644
--- a/files/zh-cn/glossary/异步/index.html
+++ b/files/zh-cn/glossary/asynchronous/index.html
@@ -1,10 +1,11 @@
---
title: 异步
-slug: Glossary/异步
+slug: Glossary/Asynchronous
tags:
- 异步
- 术语表
translation_of: Glossary/Asynchronous
+original_slug: Glossary/异步
---
<p><span class="seoSummary"><strong>异步</strong>指</span>两个或两个以上的对象或事件<strong>不</strong>同时存在或发生(<span class="seoSummary">或多个相关事物的发生无需等待其前一事物的完成)。</span>在计算机技术中,"异步"一词被用于两大语境。</p>
diff --git a/files/zh-cn/glossary/base64/index.html b/files/zh-cn/glossary/base64/index.html
new file mode 100644
index 0000000000..167f92aafc
--- /dev/null
+++ b/files/zh-cn/glossary/base64/index.html
@@ -0,0 +1,606 @@
+---
+title: Base64的编码与解码
+slug: Glossary/Base64
+translation_of: Glossary/Base64
+original_slug: Web/API/WindowBase64/Base64_encoding_and_decoding
+---
+<p><strong>Base64 </strong>是一组相似的<a href="https://en.wikipedia.org/wiki/Binary-to-text_encoding">二进制到文本</a>(binary-to-text)的编码规则,使得二进制数据在解释成 radix-64 的表现形式后能够用 ASCII 字符串的格式表示出来。<em>Base64</em> 这个词出自一种 <a href="https://en.wikipedia.org/wiki/MIME#Content-Transfer-Encoding">MIME 数据传输编码</a>。 </p>
+
+<p>Base64编码普遍应用于需要通过被设计为处理文本数据的媒介上储存和传输二进制数据而需要编码该二进制数据的场景。这样是为了保证数据的完整并且不用在传输过程中修改这些数据。Base64 也被一些应用(包括使用 <a href="https://en.wikipedia.org/wiki/MIME">MIME</a> 的电子邮件)和在 <a href="/zh-CN/docs/XML">XML</a> 中储存复杂数据时使用。 </p>
+
+<p>在 JavaScript 中,有两个函数被分别用来处理解码和编码 <em>base64</em> 字符串:</p>
+
+<ul>
+ <li>{{domxref("WindowBase64.atob","atob()")}}</li>
+ <li>{{domxref("WindowBase64.btoa","btoa()")}}</li>
+</ul>
+
+<p><code>atob()</code> 函数能够解码通过base-64编码的字符串数据。相反地,<code>btoa()</code> 函数能够从二进制数据“字符串”创建一个base-64编码的ASCII字符串。</p>
+
+<p><code>atob()</code> 和 <code>btoa()</code> 均使用字符串。如果你想使用 <code><a href="/en-US/docs/Web/API/ArrayBuffer">ArrayBuffers</a></code>,请参阅后文。</p>
+
+<h4 id="编码尺寸增加">编码尺寸增加</h4>
+
+<p>每一个Base64字符实际上代表着6比特位。因此,3字节(一字节是8比特,3字节也就是24比特)的字符串/二进制文件可以转换成4个Base64字符(4x6 = 24比特)。</p>
+
+<p>这意味着Base64格式的字符串或文件的尺寸约是原始尺寸的133%(增加了大约33%)。如果编码的数据很少,增加的比例可能会更高。例如:字符串<code>"a"</code>的<code>length === 1</code>进行Base64编码后是<code>"YQ=="</code>的<code>length === 4</code>,尺寸增加了300%。</p>
+
+
+
+<table class="topicpage-table">
+ <tbody>
+ <tr>
+ <td>
+ <h2 class="Documentation" id="Documentation" name="Documentation">文档</h2>
+
+ <dl>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/data_URIs" title="https://developer.mozilla.org/en-US/docs/data_URIs"><code>data</code> URIs</a></dt>
+ <dd><small><code>data</code> URIs, 定义于 <a class="external" href="http://tools.ietf.org/html/rfc2397" title="http://tools.ietf.org/html/rfc2397">RFC 2397</a>,用于在文档内嵌入小的文件。</small></dd>
+ <dt><a href="https://en.wikipedia.org/wiki/Base64" title="https://en.wikipedia.org/wiki/Base64">Base64</a></dt>
+ <dd><small>维基百科上关于 Base64 的文章。</small></dd>
+ <dt>{{domxref("WindowBase64.atob","atob()")}}</dt>
+ <dd><small>解码一个Base64字符串。</small></dd>
+ <dt>{{domxref("WindowBase64.btoa","btoa()")}}</dt>
+ <dd><small>从一个字符串或者二进制数据编码一个Base64字符串。</small></dd>
+ <dt><a href="#The_.22Unicode_Problem.22">"Unicode 问题"</a></dt>
+ <dd><small>在大多数浏览器里里,在一个Unicode字符串上调用btoa()会造成一个<code>Character Out Of Range异常。这一段写了一些解决方案。</code></small></dd>
+ <dt><a href="/en-US/docs/URIScheme" title="/en-US/docs/URIScheme">URIScheme</a></dt>
+ <dd><small>Mozilla支持的URI schemes列表。</small></dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Typed_arrays/StringView" title="/en-US/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code></a></dt>
+ <dd>这篇文章发布了一个我们做的库,目的在于:
+ <ul>
+ <li>为字符串创建一个类C接口 (i.e. array of characters codes —<a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBufferView" title="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBufferView"> <code>ArrayBufferView</code></a> in JavaScript) ,基于JavaScript <a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBuffer" title="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBuffer"><code>ArrayBuffer</code></a> 接口。</li>
+ <li>为类字符串对象(目前为止为: <code>stringView</code>s) 创建一系列方法,它们<strong>严格按照数字数组</strong>工作,而不是不可变的字符串。</li>
+ <li>可用于其它Unicode编码,和默认的 <code><a href="/en-US/docs/Web/API/DOMString" title="/en-US/docs/Web/API/DOMString">DOMStrings</a>不同。</code></li>
+ </ul>
+ </dd>
+ </dl>
+
+ <p><span class="alllinks"><a href="/en-US/docs/tag/Base64">查看所有...</a></span></p>
+ </td>
+ <td>
+ <h2 class="Tools" id="Tools" name="Tools">工具</h2>
+
+ <ul>
+ <li><a href="#Solution_.232_.E2.80.93_rewriting_atob()_and_btoa()_using_TypedArrays_and_UTF-8">Rewriting <code>atob()</code> and <code>btoa()</code> using <code>TypedArray</code>s and UTF-8</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays/StringView" title="/en-US/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code> – a C-like representation of strings based on typed arrays</a></li>
+ </ul>
+
+ <p><span class="alllinks"><a href="/en-US/docs/tag/Base64">View All...</a></span></p>
+
+ <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">相关文章</h2>
+
+ <ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBuffer"><code>ArrayBuffer</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">Typed arrays</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBufferView">ArrayBufferView</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays/Uint8Array"><code>Uint8Array</code></a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/StringView" title="/en-US/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code> – a C-like representation of strings based on typed arrays</a></li>
+ <li><a href="/en-US/docs/Web/API/DOMString" title="/en-US/docs/Web/API/DOMString"><code>DOMString</code></a></li>
+ <li><a href="/en-US/docs/URI" title="/en-US/docs/URI"><code>URI</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI"><code>encodeURI()</code></a></li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Unicode_问题">Unicode 问题</h2>
+
+<p>由于 <a href="/en-US/docs/Web/API/DOMString" title="/en-US/docs/Web/API/DOMString"><code>DOMString</code></a> 是16位编码的字符串,所以如果有字符超出了8位ASCII编码的字符范围时,在大多数的浏览器中对Unicode字符串调用 <code>window.btoa</code> 将会造成一个 <code>Character Out Of Range</code> 的异常。有很多种方法可以解决这个问题:</p>
+
+<ul>
+ <li><a href="#Solution_1_–_JavaScript's_UTF-16_>_base64">the first method</a> consists in encoding JavaScript's native UTF-16 strings directly into base64 (fast, portable, clean)</li>
+ <li><a href="#Solution_2_–_JavaScript's_UTF-16_>_UTF-8_>_base64">the second method</a> consists in converting JavaScript's native UTF-16 strings to UTF-8 and then encode the latter into base64 (relatively fast, portable, clean)</li>
+ <li><a href="#Solution_3_–_JavaScript's_UTF-16_>_binary_string_>_base64">the third method</a> consists in encoding JavaScript's native UTF-16 strings directly into base64 via binary strings (very fast, relatively portable, very compact)</li>
+ <li><a href="#Solution_4_–_escaping_the_string_before_encoding_it">the fourth method</a> consists in escaping the whole string (with UTF-8, see {{jsxref("encodeURIComponent")}}) and then encode it (portable, non-standard)</li>
+ <li><a href="#Solution_5_–_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8">the fifth method</a> is similar to the second method, but uses third party libraries</li>
+</ul>
+
+<h3 id="Solution_1_–_JavaScripts_UTF-16_>_base64">Solution #1 – JavaScript's UTF-16 =&gt; base64</h3>
+
+<p>A very fast and widely useable way to solve the unicode problem is by encoding JavaScript native UTF-16 strings directly into base64. Please visit the URL <code>data:text/plain;charset=utf-16;base64,OCY5JjomOyY8Jj4mPyY=</code> for a demonstration (copy the data uri, open a new tab, paste the data URI into the address bar, then press enter to go to the page). This method is particularly efficient because it does not require any type of conversion, except mapping a string into an array. The following code is also useful to get an <a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBuffer">ArrayBuffer</a> from a <em>Base64</em> string and/or viceversa (<a href="#Appendix_to_Solution_1_Decode_a_Base64_string_to_Uint8Array_or_ArrayBuffer" title="Appendix to Solution #1: Decode a Base64 string to Uint8Array or ArrayBuffer">see below</a>).</p>
+
+<pre class="brush: js notranslate">"use strict";
+
+/*\
+|*|
+|*| Base64 / binary data / UTF-8 strings utilities (#1)
+|*|
+|*| https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
+|*|
+|*| Author: madmurphy
+|*|
+\*/
+
+/* Array of bytes to base64 string decoding */
+
+function b64ToUint6 (nChr) {
+
+ return nChr &gt; 64 &amp;&amp; nChr &lt; 91 ?
+ nChr - 65
+ : nChr &gt; 96 &amp;&amp; nChr &lt; 123 ?
+ nChr - 71
+ : nChr &gt; 47 &amp;&amp; nChr &lt; 58 ?
+ nChr + 4
+ : nChr === 43 ?
+ 62
+ : nChr === 47 ?
+ 63
+ :
+ 0;
+
+}
+
+function base64DecToArr (sBase64, nBlockSize) {
+
+ var
+ sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""), nInLen = sB64Enc.length,
+ nOutLen = nBlockSize ? Math.ceil((nInLen * 3 + 1 &gt;&gt;&gt; 2) / nBlockSize) * nBlockSize : nInLen * 3 + 1 &gt;&gt;&gt; 2, aBytes = new Uint8Array(nOutLen);
+
+ for (var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx &lt; nInLen; nInIdx++) {
+ nMod4 = nInIdx &amp; 3;
+ nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) &lt;&lt; 18 - 6 * nMod4;
+ if (nMod4 === 3 || nInLen - nInIdx === 1) {
+ for (nMod3 = 0; nMod3 &lt; 3 &amp;&amp; nOutIdx &lt; nOutLen; nMod3++, nOutIdx++) {
+ aBytes[nOutIdx] = nUint24 &gt;&gt;&gt; (16 &gt;&gt;&gt; nMod3 &amp; 24) &amp; 255;
+ }
+ nUint24 = 0;
+ }
+ }
+
+ return aBytes;
+}
+
+/* Base64 string to array encoding */
+
+function uint6ToB64 (nUint6) {
+
+ return nUint6 &lt; 26 ?
+ nUint6 + 65
+ : nUint6 &lt; 52 ?
+ nUint6 + 71
+ : nUint6 &lt; 62 ?
+ nUint6 - 4
+ : nUint6 === 62 ?
+ 43
+ : nUint6 === 63 ?
+ 47
+ :
+ 65;
+
+}
+
+function base64EncArr (aBytes) {
+
+ var eqLen = (3 - (aBytes.length % 3)) % 3, sB64Enc = "";
+
+ for (var nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx &lt; nLen; nIdx++) {
+ nMod3 = nIdx % 3;
+ /* Uncomment the following line in order to split the output in lines 76-character long: */
+ /*
+ if (nIdx &gt; 0 &amp;&amp; (nIdx * 4 / 3) % 76 === 0) { sB64Enc += "\r\n"; }
+ */
+ nUint24 |= aBytes[nIdx] &lt;&lt; (16 &gt;&gt;&gt; nMod3 &amp; 24);
+ if (nMod3 === 2 || aBytes.length - nIdx === 1) {
+ sB64Enc += String.fromCharCode(uint6ToB64(nUint24 &gt;&gt;&gt; 18 &amp; 63), uint6ToB64(nUint24 &gt;&gt;&gt; 12 &amp; 63), uint6ToB64(nUint24 &gt;&gt;&gt; 6 &amp; 63), uint6ToB64(nUint24 &amp; 63));
+ nUint24 = 0;
+ }
+ }
+
+ return eqLen === 0 ?
+ sB64Enc
+ :
+ sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? "=" : "==");
+
+}
+</pre>
+
+<h4 id="Tests">Tests</h4>
+
+<pre class="brush: js notranslate">var myString = "☸☹☺☻☼☾☿";
+
+/* Part 1: Encode `myString` to base64 using native UTF-16 */
+
+var aUTF16CodeUnits = new Uint16Array(myString.length);
+Array.prototype.forEach.call(aUTF16CodeUnits, function (el, idx, arr) { arr[idx] = myString.charCodeAt(idx); });
+var sUTF16Base64 = base64EncArr(new Uint8Array(aUTF16CodeUnits.buffer));
+
+/* Show output */
+
+alert(sUTF16Base64); // "OCY5JjomOyY8Jj4mPyY="
+
+/* Part 2: Decode `sUTF16Base64` to UTF-16 */
+
+var sDecodedString = String.fromCharCode.apply(null, new Uint16Array(base64DecToArr(sUTF16Base64, 2).buffer));
+
+/* Show output */
+
+alert(sDecodedString); // "☸☹☺☻☼☾☿"</pre>
+
+<p>The produced string is fully portable, although represented as UTF-16. If you prefer UTF-8, see <a href="#Solution_2_–_JavaScript's_UTF-16_>_UTF-8_>_base64">the next solution</a>.</p>
+
+<h4 id="Appendix_to_Solution_1_Decode_a_Base64_string_to_Uint8Array_or_ArrayBuffer">Appendix to <a href="#Solution_1_–_JavaScript's_UTF-16_>_base64">Solution #1</a>: Decode a <em>Base64</em> string to <a href="/en-US/docs/Web/JavaScript/Typed_arrays/Uint8Array">Uint8Array</a> or <a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBuffer">ArrayBuffer</a></h4>
+
+<p>The functions above let us also create <a href="/en-US/docs/Web/JavaScript/Typed_arrays/Uint8Array">uint8Arrays</a> or <a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBuffer">arrayBuffers</a> from <em>base64</em>-encoded strings:</p>
+
+<pre class="brush: js notranslate">var myArray = base64DecToArr("QmFzZSA2NCDigJQgTW96aWxsYSBEZXZlbG9wZXIgTmV0d29yaw=="); // "Base 64 \u2014 Mozilla Developer Network" (as UTF-8)
+
+var myBuffer = base64DecToArr("QmFzZSA2NCDigJQgTW96aWxsYSBEZXZlbG9wZXIgTmV0d29yaw==").buffer; // "Base 64 \u2014 Mozilla Developer Network" (as UTF-8)
+
+alert(myBuffer.byteLength);</pre>
+
+<div class="note"><strong>Note:</strong> The function <code>base64DecToArr(sBase64[, <em>nBlockSize</em>])</code> returns an <a href="/en-US/docs/Web/JavaScript/Typed_arrays/Uint8Array"><code>uint8Array</code></a> of bytes. If your aim is to build a buffer of 16-bit / 32-bit / 64-bit raw data, use the <code>nBlockSize</code> argument, which is the number of bytes which the <code>uint8Array.buffer.bytesLength</code> property must result to be a multiple of (<code>1</code> or omitted for ASCII, binary content, <a href="https://developer.mozilla.org/en-US/docs/Web/API/DOMString/Binary">binary strings</a>, UTF-8-encoded strings; <code>2</code> for UTF-16 strings; <code>4</code> for UTF-32 strings).</div>
+
+<p>For a more complete library, see <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/StringView" title="/en-US/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code> – a C-like representation of strings based on typed arrays</a> (source code <a href="https://github.com/madmurphy/stringview.js">available on GitHub</a>).</p>
+
+<h3 id="Solution_2_–_JavaScripts_UTF-16_>_UTF-8_>_base64">Solution #2 – JavaScript's UTF-16 =&gt; UTF-8 =&gt; base64</h3>
+
+<p>This solution consists in converting a JavaScript's native UTF-16 string into a UTF-8 string and then encoding the latter into base64. This also grants that converting a pure ASCII string to base64 always produces the same output as the native <a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa" title="The documentation about this has not yet been written; please consider contributing!"><code>btoa()</code></a>.</p>
+
+<pre class="brush: js notranslate">"use strict";
+
+/*\
+|*|
+|*|  Base64 / binary data / UTF-8 strings utilities (#2)
+|*|
+|*|  https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
+|*|
+|*|  Author: madmurphy
+|*|
+\*/
+
+/* Array of bytes to base64 string decoding */
+
+function b64ToUint6 (nChr) {
+
+  return nChr &gt; 64 &amp;&amp; nChr &lt; 91 ?
+      nChr - 65
+    : nChr &gt; 96 &amp;&amp; nChr &lt; 123 ?
+      nChr - 71
+    : nChr &gt; 47 &amp;&amp; nChr &lt; 58 ?
+      nChr + 4
+    : nChr === 43 ?
+      62
+    : nChr === 47 ?
+      63
+    :
+      0;
+
+}
+
+function base64DecToArr (sBase64, nBlockSize) {
+
+  var
+    sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""), nInLen = sB64Enc.length,
+    nOutLen = nBlockSize ? Math.ceil((nInLen * 3 + 1 &gt;&gt;&gt; 2) / nBlockSize) * nBlockSize : nInLen * 3 + 1 &gt;&gt;&gt; 2, aBytes = new Uint8Array(nOutLen);
+
+  for (var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx &lt; nInLen; nInIdx++) {
+    nMod4 = nInIdx &amp; 3;
+    nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) &lt;&lt; 18 - 6 * nMod4;
+    if (nMod4 === 3 || nInLen - nInIdx === 1) {
+      for (nMod3 = 0; nMod3 &lt; 3 &amp;&amp; nOutIdx &lt; nOutLen; nMod3++, nOutIdx++) {
+        aBytes[nOutIdx] = nUint24 &gt;&gt;&gt; (16 &gt;&gt;&gt; nMod3 &amp; 24) &amp; 255;
+      }
+      nUint24 = 0;
+    }
+  }
+
+  return aBytes;
+}
+
+/* Base64 string to array encoding */
+
+function uint6ToB64 (nUint6) {
+
+  return nUint6 &lt; 26 ?
+      nUint6 + 65
+    : nUint6 &lt; 52 ?
+      nUint6 + 71
+    : nUint6 &lt; 62 ?
+      nUint6 - 4
+    : nUint6 === 62 ?
+      43
+    : nUint6 === 63 ?
+      47
+    :
+      65;
+
+}
+
+function base64EncArr (aBytes) {
+
+  var eqLen = (3 - (aBytes.length % 3)) % 3, sB64Enc = "";
+
+  for (var nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx &lt; nLen; nIdx++) {
+    nMod3 = nIdx % 3;
+    /* Uncomment the following line in order to split the output in lines 76-character long: */
+    /*
+    if (nIdx &gt; 0 &amp;&amp; (nIdx * 4 / 3) % 76 === 0) { sB64Enc += "\r\n"; }
+    */
+    nUint24 |= aBytes[nIdx] &lt;&lt; (16 &gt;&gt;&gt; nMod3 &amp; 24);
+    if (nMod3 === 2 || aBytes.length - nIdx === 1) {
+      sB64Enc += String.fromCharCode(uint6ToB64(nUint24 &gt;&gt;&gt; 18 &amp; 63), uint6ToB64(nUint24 &gt;&gt;&gt; 12 &amp; 63), uint6ToB64(nUint24 &gt;&gt;&gt; 6 &amp; 63), uint6ToB64(nUint24 &amp; 63));
+      nUint24 = 0;
+    }
+  }
+
+  return  eqLen === 0 ?
+      sB64Enc
+    :
+      sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? "=" : "==");
+
+}
+
+/* UTF-8 array to DOMString and vice versa */
+
+function UTF8ArrToStr (aBytes) {
+
+  var sView = "";
+
+  for (var nPart, nLen = aBytes.length, nIdx = 0; nIdx &lt; nLen; nIdx++) {
+    nPart = aBytes[nIdx];
+    sView += String.fromCharCode(
+      nPart &gt; 251 &amp;&amp; nPart &lt; 254 &amp;&amp; nIdx + 5 &lt; nLen ? /* six bytes */
+        /* (nPart - 252 &lt;&lt; 30) may be not so safe in ECMAScript! So...: */
+        (nPart - 252) * 1073741824 + (aBytes[++nIdx] - 128 &lt;&lt; 24) + (aBytes[++nIdx] - 128 &lt;&lt; 18) + (aBytes[++nIdx] - 128 &lt;&lt; 12) + (aBytes[++nIdx] - 128 &lt;&lt; 6) + aBytes[++nIdx] - 128
+      : nPart &gt; 247 &amp;&amp; nPart &lt; 252 &amp;&amp; nIdx + 4 &lt; nLen ? /* five bytes */
+        (nPart - 248 &lt;&lt; 24) + (aBytes[++nIdx] - 128 &lt;&lt; 18) + (aBytes[++nIdx] - 128 &lt;&lt; 12) + (aBytes[++nIdx] - 128 &lt;&lt; 6) + aBytes[++nIdx] - 128
+      : nPart &gt; 239 &amp;&amp; nPart &lt; 248 &amp;&amp; nIdx + 3 &lt; nLen ? /* four bytes */
+        (nPart - 240 &lt;&lt; 18) + (aBytes[++nIdx] - 128 &lt;&lt; 12) + (aBytes[++nIdx] - 128 &lt;&lt; 6) + aBytes[++nIdx] - 128
+      : nPart &gt; 223 &amp;&amp; nPart &lt; 240 &amp;&amp; nIdx + 2 &lt; nLen ? /* three bytes */
+        (nPart - 224 &lt;&lt; 12) + (aBytes[++nIdx] - 128 &lt;&lt; 6) + aBytes[++nIdx] - 128
+      : nPart &gt; 191 &amp;&amp; nPart &lt; 224 &amp;&amp; nIdx + 1 &lt; nLen ? /* two bytes */
+        (nPart - 192 &lt;&lt; 6) + aBytes[++nIdx] - 128
+      : /* nPart &lt; 127 ? */ /* one byte */
+        nPart
+    );
+  }
+
+  return sView;
+
+}
+
+function strToUTF8Arr (sDOMStr) {
+
+  var aBytes, nChr, nStrLen = sDOMStr.length, nArrLen = 0;
+
+  /* mapping... */
+
+  for (var nMapIdx = 0; nMapIdx &lt; nStrLen; nMapIdx++) {
+    nChr = sDOMStr.charCodeAt(nMapIdx);
+    nArrLen += nChr &lt; 0x80 ? 1 : nChr &lt; 0x800 ? 2 : nChr &lt; 0x10000 ? 3 : nChr &lt; 0x200000 ? 4 : nChr &lt; 0x4000000 ? 5 : 6;
+  }
+
+  aBytes = new Uint8Array(nArrLen);
+
+  /* transcription... */
+
+  for (var nIdx = 0, nChrIdx = 0; nIdx &lt; nArrLen; nChrIdx++) {
+    nChr = sDOMStr.charCodeAt(nChrIdx);
+    if (nChr &lt; 128) {
+      /* one byte */
+      aBytes[nIdx++] = nChr;
+    } else if (nChr &lt; 0x800) {
+      /* two bytes */
+      aBytes[nIdx++] = 192 + (nChr &gt;&gt;&gt; 6);
+      aBytes[nIdx++] = 128 + (nChr &amp; 63);
+    } else if (nChr &lt; 0x10000) {
+      /* three bytes */
+      aBytes[nIdx++] = 224 + (nChr &gt;&gt;&gt; 12);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 6 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &amp; 63);
+    } else if (nChr &lt; 0x200000) {
+      /* four bytes */
+      aBytes[nIdx++] = 240 + (nChr &gt;&gt;&gt; 18);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 12 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 6 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &amp; 63);
+    } else if (nChr &lt; 0x4000000) {
+      /* five bytes */
+      aBytes[nIdx++] = 248 + (nChr &gt;&gt;&gt; 24);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 18 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 12 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 6 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &amp; 63);
+    } else /* if (nChr &lt;= 0x7fffffff) */ {
+      /* six bytes */
+      aBytes[nIdx++] = 252 + (nChr &gt;&gt;&gt; 30);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 24 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 18 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 12 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &gt;&gt;&gt; 6 &amp; 63);
+      aBytes[nIdx++] = 128 + (nChr &amp; 63);
+    }
+  }
+
+  return aBytes;
+
+}</pre>
+
+<h4 id="Tests_2">Tests</h4>
+
+<pre class="brush: js notranslate">/* Tests */
+
+var sMyInput = "Base 64 \u2014 Mozilla Developer Network";
+
+var aMyUTF8Input = strToUTF8Arr(sMyInput);
+
+var sMyBase64 = base64EncArr(aMyUTF8Input);
+
+alert(sMyBase64); // "QmFzZSA2NCDigJQgTW96aWxsYSBEZXZlbG9wZXIgTmV0d29yaw=="
+
+var aMyUTF8Output = base64DecToArr(sMyBase64);
+
+var sMyOutput = UTF8ArrToStr(aMyUTF8Output);
+
+alert(sMyOutput); // "Base 64 — Mozilla Developer Network"</pre>
+
+<h3 id="Solution_3_–_JavaScripts_UTF-16_>_binary_string_>_base64">Solution #3 – JavaScript's UTF-16 =&gt; binary string =&gt; base64</h3>
+
+<p>The following is the fastest and most compact possible approach. The output is exactly the same produced by <a href="#Solution_1_–_JavaScript's_UTF-16_>_base64">Solution #1</a> (UTF-16 encoded strings), but instead of rewriting {{domxref("WindowBase64.atob","atob()")}} and {{domxref("WindowBase64.btoa","btoa()")}} it uses the native ones. This is made possible by the fact that instead of using typed arrays as encoding/decoding inputs this solution uses <a href="/en-US/docs/Web/API/DOMString/Binary">binary strings</a> as an intermediate format. It is a “dirty” workaround in comparison to <a href="#Solution_1_–_JavaScript's_UTF-16_>_base64">Solution #1</a> (<a href="/en-US/docs/Web/API/DOMString/Binary">binary strings</a> are a grey area), however it works pretty well and requires only a few lines of code.</p>
+
+<pre class="brush: js notranslate">"use strict";
+
+/*\
+|*|
+|*| Base64 / binary data / UTF-8 strings utilities (#3)
+|*|
+|*| https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
+|*|
+|*| Author: madmurphy
+|*|
+\*/
+
+function btoaUTF16 (sString) {
+
+ var aUTF16CodeUnits = new Uint16Array(sString.length);
+ Array.prototype.forEach.call(aUTF16CodeUnits, function (el, idx, arr) { arr[idx] = sString.charCodeAt(idx); });
+ return btoa(String.fromCharCode.apply(null, new Uint8Array(aUTF16CodeUnits.buffer)));
+
+}
+
+function atobUTF16 (sBase64) {
+
+ var sBinaryString = atob(sBase64), aBinaryView = new Uint8Array(sBinaryString.length);
+ Array.prototype.forEach.call(aBinaryView, function (el, idx, arr) { arr[idx] = sBinaryString.charCodeAt(idx); });
+ return String.fromCharCode.apply(null, new Uint16Array(aBinaryView.buffer));
+
+}</pre>
+
+<h4 id="Tests_3">Tests</h4>
+
+<pre class="brush: js notranslate">var myString = "☸☹☺☻☼☾☿";
+
+/* Part 1: Encode `myString` to base64 using native UTF-16 */
+
+var sUTF16Base64 = btoaUTF16(myString);
+
+/* Show output */
+
+alert(sUTF16Base64); // "OCY5JjomOyY8Jj4mPyY="
+
+/* Part 2: Decode `sUTF16Base64` to UTF-16 */
+
+var sDecodedString = atobUTF16(sUTF16Base64);
+
+/* Show output */
+
+alert(sDecodedString); // "☸☹☺☻☼☾☿"
+</pre>
+
+<p>For a cleaner solution that uses typed arrays instead of binary strings, see solutions <a href="#Solution_1_–_JavaScript's_UTF-16_>_base64">#1</a> and <a href="#Solution_2_–_JavaScript's_UTF-16_>_UTF-8_>_base64">#2</a>.</p>
+
+<h3 id="Solution_4_–_escaping_the_string_before_encoding_it">Solution #4 – escaping the string before encoding it</h3>
+
+<pre class="brush:js notranslate">function b64EncodeUnicode(str) {
+  // first we use encodeURIComponent to get percent-encoded UTF-8,
+  // then we convert the percent encodings into raw bytes which
+  // can be fed into btoa.
+ return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
+  function toSolidBytes(match, p1) {
+ return String.fromCharCode('0x' + p1);
+ }));
+}
+
+b64EncodeUnicode('✓ à la mode'); // "4pyTIMOgIGxhIG1vZGU="
+b64EncodeUnicode('\n'); // "Cg=="
+</pre>
+
+<p>To decode the Base64-encoded value back into a String:</p>
+
+<pre class="brush: js notranslate">function b64DecodeUnicode(str) {
+  // Going backwards: from bytestream, to percent-encoding, to original string.
+ return decodeURIComponent(atob(str).split('').map(function(c) {
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
+ }).join(''));
+}
+
+b64DecodeUnicode('4pyTIMOgIGxhIG1vZGU='); // "✓ à la mode"
+b64DecodeUnicode('Cg=='); // "\n"
+</pre>
+
+<p><a href="https://git.daplie.com/Daplie/unibabel-js">Unibabel</a> implements common conversions using this strategy.</p>
+
+<h3 id="Solution_5_–_rewrite_the_DOMs_atob_and_btoa_using_JavaScripts_TypedArrays_and_UTF-8">Solution #5 – rewrite the DOMs <code>atob()</code> and <code>btoa()</code> using JavaScript's <code>TypedArray</code>s and UTF-8</h3>
+
+<p>Use a <a href="/en-US/docs/Web/API/TextEncoder">TextEncoder</a> polyfill such as <a href="https://github.com/inexorabletash/text-encoding">TextEncoding</a> (also includes legacy windows, mac, and ISO encodings), <a href="https://github.com/coolaj86/TextEncoderLite">TextEncoderLite</a>, combined with a <a href="https://github.com/feross/buffer">Buffer</a> and a Base64 implementation such as <a href="https://github.com/beatgammit/base64-js">base64-js</a> or <a href="https://github.com/waitingsong/base64">TypeScript version of </a>base64-js for both modern browsers and Node.js.</p>
+
+<p>When a native <code>TextEncoder</code> implementation is not available, the most light-weight solution would be to use <a href="#Solution_3_–_JavaScript's_UTF-16_>_binary_string_>_base64">Solution #3</a> because in addition to being much faster, <a href="#Solution_3_–_JavaScript's_UTF-16_>_binary_string_>_base64">Solution #3</a> also works in IE9 "out of the box." Alternatively, use <a href="https://github.com/coolaj86/TextEncoderLite">TextEncoderLite</a> with <a href="https://github.com/beatgammit/base64-js">base64-js</a>. Use the browser implementation when you can.</p>
+
+<p>The following function implements such a strategy. It assumes base64-js imported as <code>&lt;script type="text/javascript" src="base64js.min.js"/&gt;</code>. Note that TextEncoderLite only works with UTF-8.</p>
+
+<pre class="brush: js notranslate">function Base64Encode(str, encoding = 'utf-8') {
+ var bytes = new (typeof TextEncoder === "undefined" ? TextEncoderLite : TextEncoder)(encoding).encode(str);
+ return base64js.fromByteArray(bytes);
+}
+
+function Base64Decode(str, encoding = 'utf-8') {
+ var bytes = base64js.toByteArray(str);
+ return new (typeof TextDecoder === "undefined" ? TextDecoderLite : TextDecoder)(encoding).decode(bytes);
+}
+</pre>
+
+<p><strong>注意</strong>: <a href="https://github.com/coolaj86/TextEncoderLite">TextEncoderLite</a> 不能正确处理四字节 UTF-8 字符, 比如 '\uD842\uDFB7' 或缩写为  '\u{20BB7}' 。参见 <a href="https://github.com/solderjs/TextEncoderLite/issues/16">issue </a><br>
+ 可使用 <a href="https://github.com/inexorabletash/text-encoding">text-encoding</a> 作为替代。</p>
+
+<p>某些场景下,以上经由 UTF-8 转换到 Base64 的实现在空间利用上不一定高效。当处理包含大量 U+0800-U+FFFF 区域间字符的文本时, UTF-8 输出结果长于 UTF-16 的,因为这些字符在 UTF-8 下占用三个字节而 UTF-16 是两个。在处理均匀分布 UTF-16 码点的 JavaScript 字符串时应考虑采用 UTF-16 替代 UTF-8 作为 Base64 结果的中间编码格式,这将减少 40% 尺寸。</p>
+
+<div class="standardNoteBlock">
+<p><strong>译者注</strong>:下为陈旧翻译片段</p>
+</div>
+
+<ul>
+ <li>第一个是转义(escape)整个字符串然后编码这个它;</li>
+ <li>第二个是把UTF-16的 <a href="/en-US/docs/Web/API/DOMString" title="/en-US/docs/Web/API/DOMString"><code>DOMString</code></a> 转码为UTF-8的字符数组然后编码它。</li>
+</ul>
+
+<h3 id="方案_1_–_编码之前转义escape字符串">方案 #1 – 编码之前转义(escape)字符串</h3>
+
+<pre class="brush:js notranslate">function b64EncodeUnicode(str) {
+ return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
+ return String.fromCharCode('0x' + p1);
+ }));
+}
+
+b64EncodeUnicode('✓ à la mode'); // "4pyTIMOgIGxhIG1vZGU="
+</pre>
+
+<p>把base64转换回字符串</p>
+
+<pre class="notranslate"><code>function b64DecodeUnicode(str) {
+ return decodeURIComponent(atob(str).split('').map(function(c) {
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
+ }).join(''));
+}
+
+b64DecodeUnicode('4pyTIMOgIGxhIG1vZGU='); // "✓ à la mode"
+b64DecodeUnicode('Cg=='); // "\n"</code></pre>
+
+<p><a href="https://github.com/coolaj86/unibabel-js">Unibabel</a> 是一个包含了一些使用这种策略的通用转换的库。</p>
+
+<h3 id="方案_6_–_用JavaScript的_TypedArray_和_UTF-8重写DOM的_atob_和_btoa">方案 #6 – 用JavaScript的 <code>TypedArray</code> 和 UTF-8重写DOM的 <code>atob()</code> 和 <code>btoa()</code></h3>
+
+<p>使用像<a href="https://github.com/inexorabletash/text-encoding">TextEncoding</a>(包含了早期(legacy)的windows,mac, 和 ISO 编码),<a href="https://github.com/coolaj86/TextEncoderLite/blob/master/index.js">TextEncoderLite</a> 或者 <a href="https://github.com/feross/buffer">Buffer</a> 这样的文本编码器增强(polyfill)和Base64增强,比如<a href="https://github.com/beatgammit/base64-js/blob/master/index.js">base64-js</a> 或 <a href="https://github.com/waitingsong/base64">TypeScript 版本的  </a>base64-js (适用于长青浏览器和 Node.js)。</p>
+
+<p>最简单,最轻量级的解决方法就是使用 <a href="https://github.com/coolaj86/TextEncoderLite/blob/master/index.js">TextEncoderLite</a> 和 <a href="https://github.com/beatgammit/base64-js/blob/master/index.js">base64-js</a>.</p>
+
+<p>想要更完整的库的话,参见 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/StringView" title="/en-US/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code> – a C-like representation of strings based on typed arrays</a>.</p>
+
+<h2 id="参见">参见</h2>
+
+<ul>
+ <li>{{domxref("WindowBase64.atob","atob()")}}</li>
+ <li>{{domxref("WindowBase64.btoa","btoa()")}}</li>
+ <li><a href="/en-US/docs/data_URIs" title="/en-US/docs/data_URIs"><code>data</code> URIs</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBuffer">ArrayBuffer</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">TypedArrays</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays/ArrayBufferView">ArrayBufferView</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays/Uint8Array">Uint8Array</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/StringView" title="/en-US/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code> – a C-like representation of strings based on typed arrays</a></li>
+ <li><a href="/en-US/docs/Web/API/DOMString" title="/en-US/docs/Web/API/DOMString">DOMString</a></li>
+ <li><a href="/en-US/docs/URI" title="/en-US/docs/URI"><code>URI</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI"><code>encodeURI()</code></a></li>
+ <li><a href="/en-US/docs/XPCOM_Interface_Reference/nsIURIFixup" title="/en-US/docs/XPCOM_Interface_Reference/nsIURIFixup"><code>nsIURIFixup()</code></a></li>
+ <li><a href="https://en.wikipedia.org/wiki/Base64" title="https://en.wikipedia.org/wiki/Base64"><code>Base64 on Wikipedia</code></a></li>
+</ul>
diff --git a/files/zh-cn/glossary/基线/index.html b/files/zh-cn/glossary/baseline/index.html
index 2158190685..12a262a0fd 100644
--- a/files/zh-cn/glossary/基线/index.html
+++ b/files/zh-cn/glossary/baseline/index.html
@@ -1,7 +1,8 @@
---
title: 基线
-slug: Glossary/基线
+slug: Glossary/baseline
translation_of: Glossary/baseline
+original_slug: Glossary/基线
---
<p><strong>基线</strong>是指欧洲和西亚文字排版中,用于在上面放置字符的一条假象的基准线。</p>
diff --git a/files/zh-cn/glossary/浏览器/index.html b/files/zh-cn/glossary/browser/index.html
index a52951c1b7..f3467d5f07 100644
--- a/files/zh-cn/glossary/浏览器/index.html
+++ b/files/zh-cn/glossary/browser/index.html
@@ -1,7 +1,8 @@
---
title: 浏览器
-slug: Glossary/浏览器
+slug: Glossary/Browser
translation_of: Glossary/Browser
+original_slug: Glossary/浏览器
---
<p>网页浏览器是一种从 {{Glossary("World Wide Web","Web")}} 获取和显示页面的程序,并且让用户通过 {{Glossary("hyperlink","超链接")}} 访问更多页面。</p>
diff --git a/files/zh-cn/glossary/卡片分类法/index.html b/files/zh-cn/glossary/card_sorting/index.html
index 9d5a3c4ff5..392fe3038e 100644
--- a/files/zh-cn/glossary/卡片分类法/index.html
+++ b/files/zh-cn/glossary/card_sorting/index.html
@@ -1,11 +1,12 @@
---
title: 卡片分类法
-slug: Glossary/卡片分类法
+slug: Glossary/Card_sorting
tags:
- 卡片分类法
- 名称
- 设计
translation_of: Glossary/Card_sorting
+original_slug: Glossary/卡片分类法
---
<p>卡片分类法是一种简单的技巧 ,{{glossary("Information architecture")}} 通常是邀请参与网站开发的设计师(或是开发其他类型产品的人),让他们写下他们认为这个产品应当包含的内容、服务和功能,然后将这些功能分组。一个很好的例子是考虑网站上每个页面应当显示什么样的内容。这个名字源于这个分类是通过把要分类的项目写在卡片上,再通过排列卡片完成的。</p>
diff --git a/files/zh-cn/glossary/字符编码/index.html b/files/zh-cn/glossary/character_encoding/index.html
index 40dbc7ca8a..30100d3032 100644
--- a/files/zh-cn/glossary/字符编码/index.html
+++ b/files/zh-cn/glossary/character_encoding/index.html
@@ -1,10 +1,11 @@
---
title: Character encoding(字符编码)
-slug: Glossary/字符编码
+slug: Glossary/character_encoding
tags:
- 术语
- 术语表
translation_of: Glossary/character_encoding
+original_slug: Glossary/字符编码
---
<p>一套编码系统定义字节与文本间的映射。一连串字节文本能让不同文本解释得以进行。我们指明一套特定编码系统时(如 UTF-8),也就指明了字节得以解释的方式。</p>
diff --git a/files/zh-cn/glossary/编译/index.html b/files/zh-cn/glossary/compile/index.html
index 0e11863653..0c25619c9e 100644
--- a/files/zh-cn/glossary/编译/index.html
+++ b/files/zh-cn/glossary/compile/index.html
@@ -1,7 +1,8 @@
---
title: 编译
-slug: Glossary/编译
+slug: Glossary/Compile
translation_of: Glossary/Compile
+original_slug: Glossary/编译
---
<p>编译是将相同的程序从一种计算机程序语言转换到另一种语言计算机语言的过程。编译器是运行上述任务的软件。有时候,任务也被称为“汇编”或“构建”,这通常表示不仅仅编译完成,例如,用二进制格式进行打包。</p>
diff --git a/files/zh-cn/glossary/编译时间/index.html b/files/zh-cn/glossary/compile_time/index.html
index 8c94f6fa5f..fee2476d44 100644
--- a/files/zh-cn/glossary/编译时间/index.html
+++ b/files/zh-cn/glossary/compile_time/index.html
@@ -1,7 +1,8 @@
---
title: 编译时间
-slug: Glossary/编译时间
+slug: Glossary/Compile_time
translation_of: Glossary/Compile_time
+original_slug: Glossary/编译时间
---
<p>编译时间是指程序从被加载到程序被解析完成所用的时间。</p>
diff --git a/files/zh-cn/glossary/交叉轴/index.html b/files/zh-cn/glossary/cross_axis/index.html
index 27412c4d85..63d0665cce 100644
--- a/files/zh-cn/glossary/交叉轴/index.html
+++ b/files/zh-cn/glossary/cross_axis/index.html
@@ -1,7 +1,8 @@
---
title: 交叉轴
-slug: Glossary/交叉轴
+slug: Glossary/Cross_Axis
translation_of: Glossary/Cross_Axis
+original_slug: Glossary/交叉轴
---
<p>弹性容器 {{glossary("flexbox")}} 的交叉轴和主轴 {{glossary("main axis")}} 垂直,因此如果弹性方向是 {{cssxref("flex-direction")}} 行 <code>row</code> 或者反向行 <code>row-reverse</code> ,那么交叉轴就是从上至下地垂直走向的。</p>
diff --git a/files/zh-cn/glossary/数据库/index.html b/files/zh-cn/glossary/database/index.html
index d26907d711..5b0c1a3082 100644
--- a/files/zh-cn/glossary/数据库/index.html
+++ b/files/zh-cn/glossary/database/index.html
@@ -1,9 +1,10 @@
---
title: 数据库
-slug: Glossary/数据库
+slug: Glossary/Database
tags:
- 数据库
translation_of: Glossary/Database
+original_slug: Glossary/数据库
---
<p><span class="seoSummary"><strong>数据库</strong>是一种用于收集已组织好的数据以便于搜索、结构化和扩充的存储系统。</span></p>
diff --git a/files/zh-cn/glossary/dhtml/index.html b/files/zh-cn/glossary/dhtml/index.html
new file mode 100644
index 0000000000..eac83d1582
--- /dev/null
+++ b/files/zh-cn/glossary/dhtml/index.html
@@ -0,0 +1,144 @@
+---
+title: DHTML
+slug: Glossary/DHTML
+translation_of: Glossary/DHTML
+original_slug: DHTML
+---
+<p>1、DHTML 对象 !DOCTYPE 指定了 HTML 文档遵循的文档类型定义(DTD)。</p>
+<p>a 标明超链接的起始或目的位置。</p>
+<p>acronym 标明缩写词。</p>
+<p>address 特定信息,如地址、签名、作者、此文档的原创者。</p>
+<p>applet 在页面上放置可执行内容。</p>
+<p>area 定义一个客户端图像映射中一个超级链接区域的形状、坐标和关联 URL。</p>
+<p>attribute 以对象的形式代表了 HTML 元素的标签属性或属性。</p>
+<p>b 指定文本应以粗体渲染。</p>
+<p>base 指定一个显示 URL 用于解析对于外部源的链接和引用,如图像和样式表。</p>
+<p>baseFont 设置渲染文本时作为缺省字体的基础字体值。</p>
+<p>bdo 允许作者为选定文本片断禁用双向法则。</p>
+<p>bgSound 允许页面带有背景声音或创建音轨。</p>
+<p>big 指定内含文本要以比当前字体稍大的字体显示。</p>
+<p>blockQuote 设置文本中的一段引语。</p>
+<p>body 指定文档主体的开始和结束。</p>
+<p>br 插入一个换行符。</p>
+<p>button 指定其中所含的 HTML 要被渲染为一个按钮。</p>
+<p>caption 指定表格的简要描述。</p>
+<p>center 将后面的文本和图像居中显示。</p>
+<p>cite 用斜体显示标明引言。</p>
+<p>clientInformation 包含关于 Web 浏览器的信息。</p>
+<p>clipboardData 提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用。</p>
+<p>code 指定代码范例。</p>
+<p>col 指定基于列的表格缺省属性。</p>
+<p>colGroup 指定表格中一列或一组列的缺省属性。</p>
+<p>comment 标明不可见的注释。</p>
+<p>currentStyle 代表了在全局样式表、内嵌样式和 HTML 标签属性中指定的对象格式和样式。</p>
+<p>custom 代表了一个用户自定义元素。</p>
+<p>dataTransfer 提供了对于预定义的剪贴板格式的访问,以便在拖曳操作中使用。</p>
+<p>dd 在定义列表中表明定义。定义通常在定义列表中缩进。</p>
+<p>defaults 编程设定元素行为的缺省属性。</p>
+<p>del 表明文本已经从文档中删除。</p>
+<p>dfn 表明术语的定义实例。</p>
+<p>对话框帮助协助程序 提供对颜色对话框及块格式化和字体集合的访问。</p>
+<p>dir 引起目录列表。</p>
+<p>div 指定渲染 HTML 的容器。</p>
+<p>dl 引起定义列表。</p>
+<p>document 代表给定浏览器窗口中的 HTML 文档。</p>
+<p>dt 在定义列表中表明定义术语。</p>
+<p>em 强调文本,通常以斜体渲染。</p>
+<p>embed 允许嵌入任何文档。</p>
+<p>event 代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态。</p>
+<p>external 允许访问由 Microsoft? Internet Explorer 浏览器组件宿主应用程序提供的附加对象模型。</p>
+<p>fieldSet 在字段集包含的文本和其它元素外面绘制一个方框。</p>
+<p>font 指定用于渲染所包含文本的新字体、大小和颜色。</p>
+<p>form 指定所包含控件在表单中起作用。</p>
+<p>frame 在 FRAMESET 元素内指定单个框架。</p>
+<p>frameSet 指定一个框架集,用于组织多个框架和嵌套框架集。</p>
+<p>head 提供了关于文档的无序信息集合。</p>
+<p>history 包含了用户已浏览的 URL 的信息。</p>
+<p>hn 以标题样式渲染文本。</p>
+<p>hr 绘制水平线。</p>
+<p>html 表明文档包含 HTML 元素。</p>
+<p>HTML 注释 避免任何内含文本或 HTML 源代码被处理并在浏览器窗口中显示。</p>
+<p>i 指定文本应以斜体渲染,若可用的话。</p>
+<p>iframe 创建内嵌浮动框架。</p>
+<p>img 在文档中嵌入图像或视频剪辑。</p>
+<p>implementation 包含了关于对象支持的模块信息。</p>
+<p>IMPORT 从元素行为中导入标签定义。</p>
+<p>input 创建各种表单输入控件。</p>
+<p>input type=button 创建按钮控件。</p>
+<p>input type=checkbox 创建复选框控件。</p>
+<p>input type=file 创建文件上载控件,该控件带有一个文本框和一个浏览按钮。</p>
+<p>input type=hidden 传输关于客户/服务器交互的状态信息。</p>
+<p>input type=image 创建一个图像控件,该控件单击后将导致表单立即被提交。</p>
+<p>input type=password 创建与 INPUT type=text 控件类似的单行文本输入控件,不过其中并不显示用户输入的内容。</p>
+<p>input type=radio 创建单选钮控件。</p>
+<p>input type=reset 创建一个按钮,该按钮单击后将重置表单控件为其缺省值。</p>
+<p>input type=submit 创建一个按钮,该按钮单击后将提交表单。 input type=text 创建一个单行的文本输入控件。</p>
+<p>ins 指定被插入到文档中的文本。</p>
+<p>isIndex 使浏览器显示一个对话框,提示用户输入单行文本。</p>
+<p>kbd 以固定宽度字体渲染文本。</p>
+<p>label 为页面上的其它元素指定标签。</p>
+<p>legend 在 fieldSet 对象绘制的方框内插入一个标题。</p>
+<p>li 引起列表中的一个项目。</p>
+<p>link 允许当前文档和外部文档之间建立连接。</p>
+<p>listing 以固定字体渲染文本。</p>
+<p>location 包含关于当前 URL 的信息。</p>
+<p>map 包含客户端图像映射的坐标数据。</p>
+<p>marquee 创建一个滚动的文本字幕。</p>
+<p>menu 创建一个项目的无序列表。</p>
+<p>meta 向服务器和客户端传达关于文档的隐藏信息。</p>
+<p>namespace 向文档中动态导入一个元素行为。</p>
+<p>navigator 包含关于 Web 浏览器的信息。</p>
+<p>nextID 创建编辑软件可以读取的唯一标识符。</p>
+<p>noBR 不换行渲染文本。 noFrames 包含对于那些不支持 FRAMESET 元素的浏览器使用的 HTML。</p>
+<p>noScript 指定要在不支持脚本的浏览器显示的 HTML。</p>
+<p>object 向 HTML 页面中插入对象。</p>
+<p>ol 绘制文本的编号列表。</p>
+<p>optGroup 允许作者对 select 元素中的选项进行逻辑分组。</p>
+<p>option 引起 SELECT 元素中的一个选项。</p>
+<p>p 引起一段。</p>
+<p>page 代表 styleSheet 中的一条 @page 规则。</p>
+<p>param 设置 APPLET、EMBED 或 OBJECT 元素的属性初始值。</p>
+<p>plainText 以固定宽度字体渲染文本,不处理标签。</p>
+<p>popup 一种特殊的顶层窗口,主要用于出现在应用程序主窗口之外的对话框、消息框和其它临时窗 口。</p>
+<p>pre 以固定宽度字体渲染文本。</p>
+<p>q 分离文本中的引语。</p>
+<p>rt 指明 RUBY 元素的注音文本。</p>
+<p>ruby 指明要放置在文本串之上或内嵌的注解或发音指南。</p>
+<p>rule 代表了层叠样式表(CSS)中由选择符和一个或多个声明组成的的样式。</p>
+<p>runtimeStyle 代表了居于全局样式表、内嵌样式和 HTML 标签属性指定的格式和样式之上的对象的格式和样式。</p>
+<p>s 以删除线字体渲染文本。</p>
+<p>samp 指定代码范例。</p>
+<p>screen 包含关于客户屏幕和渲染能力的信息。</p>
+<p>script 为脚本指定由脚本引擎解释的脚本。</p>
+<p>select 引起列表框或下拉框。</p>
+<p>selection 代表了当前激活选中区,即高亮文本块,和/或文档中用户可执行某些操作的其它元素。</p>
+<p>small 指定内含文本要以比当前字体稍小的字体显示。</p>
+<p>span 指定内嵌文本容器。</p>
+<p>strike 以删除线字体渲染文本。</p>
+<p>strong 以粗体渲染文本。</p>
+<p>style 代表了给定元素所有可能的内嵌样式的当前设置。</p>
+<p>style 指定页面的样式表。</p>
+<p>styleSheet 代表了文档中单一的样式表。</p>
+<p>sub 指定内含文本要以下标的形式显示,通常比当前字体稍小。</p>
+<p>sup 指定内含文本要以上标的形式显示,通常比当前字体稍小。</p>
+<p>table 指定所含内容要组织成行列的表格。</p>
+<p>tBody 指明行作为表格主体。</p>
+<p>td 指定表格中的单元格。</p>
+<p>textArea 指定多行文本输入控件。</p>
+<p>TextNode 将文本字符串代表为文档层次中的结点。</p>
+<p>TextRange 代表 HTML 元素中的文本。</p>
+<p>TextRectangle 指定包含元素或 TextRange 对象中一行文本的矩形。</p>
+<p>tFoot 指明行作为表尾。</p>
+<p>th 指定标题列。标题列将在单元格中居中并以粗体显示。</p>
+<p>tHead 指明行作为表头。</p>
+<p>title 包含文档的标题。</p>
+<p>tr 指定表格中的一行。</p>
+<p>tt 以固定宽度字体渲染文本。</p>
+<p>u 带下划线渲染文本。</p>
+<p>ul 绘制文本的项目符号列表。</p>
+<p>userProfile 提供了允许脚本对用户配置信息请求读取访问并执行读取操作的方法。</p>
+<p>var 定义编程变量。通常以斜体渲染。</p>
+<p>wbr 向一块 NOBR 文本中插入软换行。</p>
+<p>window 代表浏览器中一个打开的窗口。</p>
+<p>xml 在 HTML 页面上定义一个 XML 数据岛。</p>
+<p>xmp 以固定宽度字体渲染作为示例的字体。</p>
diff --git a/files/zh-cn/glossary/数字证书/index.html b/files/zh-cn/glossary/digital_certificate/index.html
index 0f6702c480..297334bfc6 100644
--- a/files/zh-cn/glossary/数字证书/index.html
+++ b/files/zh-cn/glossary/digital_certificate/index.html
@@ -1,7 +1,8 @@
---
title: 数字证书
-slug: Glossary/数字证书
+slug: Glossary/Digital_certificate
translation_of: Glossary/Digital_certificate
+original_slug: Glossary/数字证书
---
<p><span class="seoSummary">数字证书是一个将公开的{{Glossary("Key", "加密密钥")}}和一个组织绑定的数据文件。</span> 一个数字证书包含一个组织的信息,如公共名称(例如mozilla.org),组织单元(例如Mozilla Corporation)以及位置(例如Mountain View)。数字证书通常由{{Glossary("certificate authority")}}签署,以证明其真实性。</p>
diff --git a/files/zh-cn/glossary/域名/index.html b/files/zh-cn/glossary/domain_name/index.html
index cb88cc041b..8aea5446be 100644
--- a/files/zh-cn/glossary/域名/index.html
+++ b/files/zh-cn/glossary/domain_name/index.html
@@ -1,7 +1,8 @@
---
title: 域名
-slug: Glossary/域名
+slug: Glossary/Domain_name
translation_of: Glossary/Domain_name
+original_slug: Glossary/域名
---
<p>域名是在 {{Glossary("Internet", "互联网")}} 的网站的地址。域名被用于 {{Glossary("URL","URL")}} 识别一个服务器属于哪个特定的网站。域名包含由句号点(”.“)分隔的名称(标签)的分级序列并以 {{glossary("TLD","扩展名")}} 作为结尾。</p>
diff --git a/files/zh-cn/glossary/dtd/index.html b/files/zh-cn/glossary/dtd/index.html
deleted file mode 100644
index 543d822170..0000000000
--- a/files/zh-cn/glossary/dtd/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: DTD
-slug: Glossary/DTD
-translation_of: Glossary/Doctype
-translation_of_original: Glossary/DTD
----
-<p>{{page("/en-US/docs/Glossary/Doctype")}}</p>
-
-<p><font face="Courier New">&lt;!DOCTYPE&gt;</font> informs the <a class="glossaryLink" href="https://developer.mozilla.org/en-US/docs/Glossary/browser" title="browser: A Web browser is a program that retrieves and displays pages from the Web, and lets users access further pages through hyperlinks."><u><font color="#0066cc">browser</font></u></a> which version of <a class="glossaryLink" href="https://developer.mozilla.org/en-US/docs/Glossary/HTML" title="HTML: HTML (HyperText Markup Language) is a descriptive language that specifies webpage structure."><u><font color="#0066cc">HTML</font></u></a> (or <a class="glossaryLink" href="https://developer.mozilla.org/en-US/docs/Glossary/XML" title="XML: eXtensible Markup Language (XML) is a generic markup language specified by the W3C. The IT industry uses many languages based on XML as data-description languages."><u><font color="#0066cc">XML</font></u></a>) you used to write the document. Doctype is a <a class="new glossaryLink" href="https://developer.mozilla.org/en-US/docs/Glossary/declaration" title="The definition of that term (declaration) has not been written yet; please consider contributing it!"><u><font color="#0066cc">declaration</font></u></a>, not a <a class="glossaryLink" href="https://developer.mozilla.org/en-US/docs/Glossary/tag" title="tag: In HTML a tag is used for creating an element.  The name of an HTML element is the name used in angle brackets such as &lt;p> for paragraph.  Note that the end tag's name is preceded by a slash character, &quot;&lt;/p>&quot;, and that in empty elements the end tag is neither required nor allowed. If attributes are not mentioned, default values are used in each case."><u><font color="#0066cc">tag</font></u></a>; you can also refer to it as "document type declaration", or "DTD" for short.</p>
diff --git a/files/zh-cn/glossary/元素/index.html b/files/zh-cn/glossary/element/index.html
index d199da5b07..c5ac84aedb 100644
--- a/files/zh-cn/glossary/元素/index.html
+++ b/files/zh-cn/glossary/element/index.html
@@ -1,12 +1,13 @@
---
title: Element(元素)
-slug: Glossary/元素
+slug: Glossary/Element
tags:
- HTML
- XML
- 术语
- 编程
translation_of: Glossary/Element
+original_slug: Glossary/元素
---
<p><strong>元素</strong>是网页的一部分,在 {{glossary("XML")}} 和 {{glossary("HTML")}} 中,一个元素可以包含一个数据项,或是一块文本,或是一张照片,亦或是什么也不包含。 一个典型的元素包括一个具有一些{{glossary("attribute", "属性")}}的开始标签,中间的文本内容和一个结束标签。<br>
<img alt="Example: in &lt;p class=&quot;nice&quot;>Hello world!&lt;/p>, '&lt;p class=&quot;nice&quot;>' is an opening tag, 'class=&quot;nice&quot;' is an attribute and its value, 'Hello world!' is enclosed text content, and '&lt;/p>' is a closing tag." src="https://mdn.mozillademos.org/files/7659/anatomy-of-an-html-element.png" style="height: 181px; width: 609px;"></p>
diff --git a/files/zh-cn/glossary/空元素/index.html b/files/zh-cn/glossary/empty_element/index.html
index 6d9fb8d229..38fd275e74 100644
--- a/files/zh-cn/glossary/空元素/index.html
+++ b/files/zh-cn/glossary/empty_element/index.html
@@ -1,11 +1,12 @@
---
title: 空元素
-slug: Glossary/空元素
+slug: Glossary/Empty_element
tags:
- Glossary
- 中级
- 词汇
translation_of: Glossary/Empty_element
+original_slug: Glossary/空元素
---
<p>一个<strong>空元素(empty element)</strong>可能是 HTML,SVG,或者 MathML 里的一个不能存在子节点(例如内嵌的元素或者元素内的文本)的{{Glossary("element")}}。</p>
diff --git a/files/zh-cn/glossary/禁止修改的消息首部/index.html b/files/zh-cn/glossary/forbidden_header_name/index.html
index 6e14c9b0a1..022d54690f 100644
--- a/files/zh-cn/glossary/禁止修改的消息首部/index.html
+++ b/files/zh-cn/glossary/forbidden_header_name/index.html
@@ -1,7 +1,8 @@
---
title: 禁止修改的消息首部
-slug: Glossary/禁止修改的消息首部
+slug: Glossary/Forbidden_header_name
translation_of: Glossary/Forbidden_header_name
+original_slug: Glossary/禁止修改的消息首部
---
<p>禁止修改的消息首部指的是不能在代码中通过编程的方式进行修改的<a href="/en-US/docs/Web/HTTP/Headers">HTTP协议消息首部</a>。本文仅讨论相关的HTTP<strong>请求</strong>首部(关于禁止修改的响应首部,请参考 {{Glossary("Forbidden response header name")}})。</p>
diff --git a/files/zh-cn/glossary/通用首部/index.html b/files/zh-cn/glossary/general_header/index.html
index acb1f99edf..6c03d3605a 100644
--- a/files/zh-cn/glossary/通用首部/index.html
+++ b/files/zh-cn/glossary/general_header/index.html
@@ -1,10 +1,11 @@
---
title: General header(通用首部)
-slug: Glossary/通用首部
+slug: Glossary/General_header
tags:
- HTTP
- 术语
translation_of: Glossary/General_header
+original_slug: Glossary/通用首部
---
<p><strong>通用首部</strong>指的是可以应用于请求和响应中,但是不能应用于消息内容自身的 {{glossary('Header', 'HTTP 首部')}} 。 取决于应用的上下文环境,通用首部可以是{{glossary("Response header", "响应头部")}}或者{{glossary("request header", "请求头部")}}。但是不可以是{{glossary("entity header", "实体头部")}}。</p>
diff --git a/files/zh-cn/glossary/优雅降级/index.html b/files/zh-cn/glossary/graceful_degradation/index.html
index acd22a665e..2982cc0074 100644
--- a/files/zh-cn/glossary/优雅降级/index.html
+++ b/files/zh-cn/glossary/graceful_degradation/index.html
@@ -1,11 +1,12 @@
---
title: Graceful degradation(优雅降级)
-slug: Glossary/优雅降级
+slug: Glossary/Graceful_degradation
tags:
- 优雅降级
- 设计
- 词汇表
translation_of: Glossary/Graceful_degradation
+original_slug: Glossary/优雅降级
---
<p><strong>优雅降级(Graceful degradation)</strong>是一种设计理念,其核心是尝试构建可在最新浏览器中运行的现代网站/应用程序,而作为降级体验,在低版本浏览器中仍然提供必要的内容和功能。</p>
diff --git a/files/zh-cn/glossary/header/index.html b/files/zh-cn/glossary/http_header/index.html
index a79ef62498..e176995fc8 100644
--- a/files/zh-cn/glossary/header/index.html
+++ b/files/zh-cn/glossary/http_header/index.html
@@ -1,11 +1,12 @@
---
title: HTTP header(HTTP 首部)
-slug: Glossary/Header
+slug: Glossary/HTTP_header
tags:
- Glossary
- HTTP
- 术语
translation_of: Glossary/HTTP_header
+original_slug: Glossary/Header
---
<p><strong>HTTP header</strong>(HTTP 首部,HTTP 头)表示在 HTTP 请求或响应中的用来传递附加信息的字段,修改所传递的消息(或者消息主体)的语义,或者使其更加精确。消息首部不区分大小写,开始于一行的开头,后面紧跟着一个 <code>':'</code> 和与之相关的值。字段值在一个换行符(CRLF)前或者整个消息的末尾结束。</p>
diff --git a/files/zh-cn/glossary/幂等/index.html b/files/zh-cn/glossary/idempotent/index.html
index cc8b22c143..e0dde60f23 100644
--- a/files/zh-cn/glossary/幂等/index.html
+++ b/files/zh-cn/glossary/idempotent/index.html
@@ -1,10 +1,11 @@
---
title: 幂等
-slug: Glossary/幂等
+slug: Glossary/Idempotent
tags:
- Glossary
- WebMechanics
translation_of: Glossary/Idempotent
+original_slug: Glossary/幂等
---
<p>一个HTTP方法是<strong>幂等</strong>的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。在正确实现的条件下, {{HTTPMethod("GET")}} , {{HTTPMethod("HEAD")}} , {{HTTPMethod("PUT")}} 和 {{HTTPMethod("DELETE")}}  等方法都是<strong>幂等</strong>的,而  {{HTTPMethod("POST")}}  方法不是。所有的 {{glossary("safe")}} 方法也都是幂等的。</p>
diff --git a/files/zh-cn/glossary/立即执行函数表达式/index.html b/files/zh-cn/glossary/iife/index.html
index 659d1e8670..1150a22614 100644
--- a/files/zh-cn/glossary/立即执行函数表达式/index.html
+++ b/files/zh-cn/glossary/iife/index.html
@@ -1,12 +1,13 @@
---
title: IIFE(立即调用函数表达式)
-slug: Glossary/立即执行函数表达式
+slug: Glossary/IIFE
tags:
- CodingScripting
- Glossary
- JavaScript
- 术语
translation_of: Glossary/IIFE
+original_slug: Glossary/立即执行函数表达式
---
<p><strong>IIFE</strong>( 立即调用函数表达式)是一个在定义时就会立即执行的  {{glossary("JavaScript")}} {{glossary("function","函数")}}。</p>
diff --git a/files/zh-cn/glossary/ip地址/index.html b/files/zh-cn/glossary/ip_address/index.html
index 52686f1c20..396969dc8e 100644
--- a/files/zh-cn/glossary/ip地址/index.html
+++ b/files/zh-cn/glossary/ip_address/index.html
@@ -1,11 +1,12 @@
---
title: IP地址
-slug: Glossary/IP地址
+slug: Glossary/IP_Address
tags:
- IP地址
- 初学者
- 术语表
translation_of: Glossary/IP_Address
+original_slug: Glossary/IP地址
---
<p>IP地址是分配给连接到使用Internet协议的网络的每个设备的一串数字。</p>
diff --git a/files/zh-cn/glossary/localization/index.html b/files/zh-cn/glossary/localization/index.html
new file mode 100644
index 0000000000..1ba3b8bed6
--- /dev/null
+++ b/files/zh-cn/glossary/localization/index.html
@@ -0,0 +1,63 @@
+---
+title: 本地化
+slug: Glossary/Localization
+translation_of: Glossary/Localization
+original_slug: Localization
+---
+<p><strong>Localization</strong> (L10n) is the process of translating software user interfaces from one language to another and adapting it to suit a foreign culture. These resources are for anyone with an interest in the technical aspects involved in localization. They are for developers and all contributors.</p>
+<table class="topicpage-table">
+ <tbody>
+ <tr>
+ <td>
+ <h2 class="Documentation" id="Documentation">Documentation</h2>
+ <dl>
+ <dt>
+ <a href="/en-US/docs/Localization_Quick_Start_Guide" title="https://developer.mozilla.org/en-US/docs/Localization_Quick_Start_Guide">Localization Quick Start Guide</a></dt>
+ <dd>
+ First read for volunteers wanting to start localizing.</dd>
+ <dt>
+ <a href="/en-US/docs/XUL_Tutorial/Localization" title="en-US/docs/XUL_Tutorial/Localization">XUL Tutorial:Localization</a></dt>
+ <dd>
+ <a href="/en-US/docs/XUL_Tutorial" title="en-US/docs/XUL_Tutorial">XUL Tutorial</a> section on localizing XUL applications.</dd>
+ <dt>
+ <a href="/en-US/docs/Writing_localizable_code" title="en-US/docs/Writing_localizable_code">Writing localizable code</a></dt>
+ <dd>
+ Best practices and guidelines for programmers to play nicely with localization.</dd>
+ <dt>
+ <a class="external" href="http://wiki.babelzilla.org/index.php?title=Tutorials#How_to_localize_strings_from_the_help.html_file_of_an_extension" title="http://wiki.babelzilla.org/index.php?title=Tutorials#How_to_localize_strings_from_the_help.html_file_of_an_extension">Localizing Help files</a></dt>
+ <dd>
+ How to separate content from HTML to make these files more easy to localize.</dd>
+ <dt>
+ <a class="external" href="http://wiki.babelzilla.org/index.php?title=Tutorials#How_to_resize_a_xul_pref_dialog_according_to_every_language" title="http://wiki.babelzilla.org/index.php?title=Tutorials#How_to_resize_a_xul_pref_dialog_according_to_every_language">Custom dialog size</a></dt>
+ <dd>
+ How to adjust window sizes to fit specific localizations.</dd>
+ <dt>
+ <a href="/en-US/docs/Localizing_extension_descriptions" title="en-US/docs/Localizing_extension_descriptions">Localizing extension descriptions</a></dt>
+ <dd>
+ To localize the description of an extension (the string that shows up under extension's name in the Extensions window), you need to use a special preference key to override the description specified in your install.rdf file. This article contains instructions on how to modify this preference key.</dd>
+ <dt>
+ <a href="/en-US/docs/Frequently_Asked_Localization_Questions" title="en-US/docs/Frequently_Asked_Localization_Questions">Frequently Asked Localization Questions</a></dt>
+ <dd>
+ Frequently asked questions about localization.</dd>
+ </dl>
+ <p><span class="alllinks"><a href="/en-US/docs/tag/Localization" title="en-US/docs/tag/Localization">View All...</a></span></p>
+ </td>
+ <td>
+ <h2 class="Community" id="Community">Community</h2>
+ <ul>
+ <li>View Mozilla forums...</li>
+ </ul>
+ <p>{{ DiscussionList("dev-l10n", "mozilla.dev.l10n") }}</p>
+ <ul>
+ <li><a href="/Special:Tags?tag=Localization:Tools&amp;language=en" title="Special:Tags?tag=Localization:Tools&amp;language=en">Tools</a></li>
+ <li><a class="link-https" href="https://wiki.mozilla.org/L10n" title="https://wiki.mozilla.org/L10n">Community</a></li>
+ </ul>
+ <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Related Topics</h2>
+ <ul>
+ <li><a href="/en-US/docs/Extensions" title="en-US/docs/Extensions">Extensions</a>, <a href="/en-US/docs/XUL" title="en-US/docs/XUL">XUL</a></li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<p> </p>
diff --git a/files/zh-cn/glossary/主轴/index.html b/files/zh-cn/glossary/main_axis/index.html
index c3c8b91de1..aaee256e7d 100644
--- a/files/zh-cn/glossary/主轴/index.html
+++ b/files/zh-cn/glossary/main_axis/index.html
@@ -1,7 +1,8 @@
---
title: 主轴
-slug: Glossary/主轴
+slug: Glossary/Main_Axis
translation_of: Glossary/Main_Axis
+original_slug: Glossary/主轴
---
<p>主轴是由弹性容器 {{glossary("flexbox")}} 中弹性方向 {{cssxref("flex-direction")}} 属性所定义的的。弹性方向 <code>flex-direction </code> 有4个可能的值,分别是:</p>
diff --git a/files/zh-cn/glossary/面向对象编程/index.html b/files/zh-cn/glossary/oop/index.html
index 4f2793cc69..b4163352cd 100644
--- a/files/zh-cn/glossary/面向对象编程/index.html
+++ b/files/zh-cn/glossary/oop/index.html
@@ -1,11 +1,12 @@
---
title: OOP
-slug: Glossary/面向对象编程
+slug: Glossary/OOP
tags:
- 初学者
- 术语
- 编写脚本
translation_of: Glossary/OOP
+original_slug: Glossary/面向对象编程
---
<p><strong>OOP</strong>(面向对象编程)是一种编程方法,其中数据封装在<strong>{{glossary("object","对象")}}</strong>中,对象本身在其上运行,而不是其组成部分。</p>
diff --git a/files/zh-cn/glossary/源/index.html b/files/zh-cn/glossary/origin/index.html
index 83090ee98f..ed3ce153e8 100644
--- a/files/zh-cn/glossary/源/index.html
+++ b/files/zh-cn/glossary/origin/index.html
@@ -1,7 +1,8 @@
---
title: Origin
-slug: Glossary/源
+slug: Glossary/Origin
translation_of: Glossary/Origin
+original_slug: Glossary/源
---
<p>Web内容的源由用于访问它的{{Glossary("URL")}} 的方案(协议),主机(域名)和端口定义。只有当方案,主机和端口都匹配时,两个对象具有相同的起源。</p>
diff --git a/files/zh-cn/glossary/渐进增强/index.html b/files/zh-cn/glossary/progressive_enhancement/index.html
index 7a0b586b9a..ebb2d01925 100644
--- a/files/zh-cn/glossary/渐进增强/index.html
+++ b/files/zh-cn/glossary/progressive_enhancement/index.html
@@ -1,11 +1,12 @@
---
title: 渐进增强
-slug: Glossary/渐进增强
+slug: Glossary/Progressive_Enhancement
tags:
- 无障碍
- 设计
- 词汇表
translation_of: Glossary/Progressive_Enhancement
+original_slug: Glossary/渐进增强
---
<p><strong>渐进增强(Progressive enhancement)</strong>是一种设计理念,其核心是为尽可能多的用户提供基本内容和功能,同时进一步为现代化浏览器用户提供最佳体验,运行所有需要的代码。</p>
diff --git a/files/zh-cn/glossary/代理服务器/index.html b/files/zh-cn/glossary/proxy_server/index.html
index 86774d0a71..1e680cfedf 100644
--- a/files/zh-cn/glossary/代理服务器/index.html
+++ b/files/zh-cn/glossary/proxy_server/index.html
@@ -1,11 +1,12 @@
---
title: 代理服务器
-slug: Glossary/代理服务器
+slug: Glossary/Proxy_server
tags:
- 代理
- 服务器
- 术语
translation_of: Glossary/Proxy_server
+original_slug: Glossary/代理服务器
---
<p><strong>代理服务器</strong> 是用来在不同Internet网络之间进行导航的中继软件或者计算机。 它们有助于访问万维网上的内容。代理服务器会拦截请求并提供响应;它不一定会转发所有请求(比如说在有缓存的情况), 而且也许会修改请求或者响应 (比如说在两个网络环境边界的时候修改请求头部信息)。</p>
diff --git a/files/zh-cn/glossary/伪类/index.html b/files/zh-cn/glossary/pseudo-class/index.html
index 56c818928f..066340f11a 100644
--- a/files/zh-cn/glossary/伪类/index.html
+++ b/files/zh-cn/glossary/pseudo-class/index.html
@@ -1,11 +1,12 @@
---
title: 伪类
-slug: Glossary/伪类
+slug: Glossary/Pseudo-class
tags:
- CSS
- 伪类
- 选择器
translation_of: Glossary/Pseudo-class
+original_slug: Glossary/伪类
---
<p>在 CSS 中, 一个伪类选择器只依据元素的状态, 而不是元素在文档树中的信息, 来选择目标对象.举例来说, 选择器 <code>a</code>{{ cssxref(":visited") }} 仅仅应用于那些用户已经浏览过的连接.</p>
diff --git a/files/zh-cn/glossary/请求头/index.html b/files/zh-cn/glossary/request_header/index.html
index 666ace7ea4..82c98704fc 100644
--- a/files/zh-cn/glossary/请求头/index.html
+++ b/files/zh-cn/glossary/request_header/index.html
@@ -1,10 +1,11 @@
---
title: Request header(请求头)
-slug: Glossary/请求头
+slug: Glossary/Request_header
tags:
- HTTP
- 术语
translation_of: Glossary/Request_header
+original_slug: Glossary/请求头
---
<p><strong>请求头</strong>是 {{glossary("header", "HTTP 头")}}的一种,它可在 HTTP 请求中使用,并且和请求主体无关 。某些请求头如 {{HTTPHeader("Accept")}}、{{HTTPHeader("Accept-Language", "Accept-*")}}、 {{HTTPHeader("If-Modified-Since", "If-*")}} 允许执行条件请求。某些请求头如:{{HTTPHeader("Cookie")}}, {{HTTPHeader("User-Agent")}} 和 {{HTTPHeader("Referer")}} 描述了请求本身以确保服务端能返回正确的响应。</p>
diff --git a/files/zh-cn/glossary/语义/index.html b/files/zh-cn/glossary/semantics/index.html
index 54cb20f0b9..201d6e91c1 100644
--- a/files/zh-cn/glossary/语义/index.html
+++ b/files/zh-cn/glossary/semantics/index.html
@@ -1,11 +1,12 @@
---
title: Semantics(语义)
-slug: Glossary/语义
+slug: Glossary/Semantics
tags:
- 编程
- 语义
- 语义化
translation_of: Glossary/Semantics
+original_slug: Glossary/语义
---
<p><span class="seoSummary">在编程中,<strong>语义</strong>指的是一段代码的含义 — 例如 "运行这行 JavaScript 代码会产生怎样的影响?", 或者 "这个 HTML 的元素有什么作用,扮演了什么样的角色"(而不只是 "它看上去像是什么?"。)</span></p>
diff --git a/files/zh-cn/glossary/serialize/index.html b/files/zh-cn/glossary/serialization/index.html
index 8405434f3e..1a90c7754a 100644
--- a/files/zh-cn/glossary/serialize/index.html
+++ b/files/zh-cn/glossary/serialization/index.html
@@ -1,12 +1,13 @@
---
title: Serialize
-slug: Glossary/Serialize
+slug: Glossary/Serialization
tags:
- Glossary
- JavaScript
- Serialize
translation_of: Glossary/Serialization
translation_of_original: Glossary/Serialize
+original_slug: Glossary/Serialize
---
<p>序列化(Serialization )意味着将 {{Glossary("object", "对象")}} 或某种其他类型的数据结构转换为可存储格式(例如,文件或 {{Glossary("buffer")}})。</p>
diff --git a/files/zh-cn/glossary/简单头部/index.html b/files/zh-cn/glossary/simple_header/index.html
index c2c1f71d4f..846fc193cd 100644
--- a/files/zh-cn/glossary/简单头部/index.html
+++ b/files/zh-cn/glossary/simple_header/index.html
@@ -1,11 +1,12 @@
---
title: 简单头部
-slug: Glossary/简单头部
+slug: Glossary/Simple_header
tags:
- HTTP
- 简单头部
- 跨域
translation_of: Glossary/Simple_header
+original_slug: Glossary/简单头部
---
<p>以下的 <a href="/en-US/docs/Web/HTTP/Headers">HTTP headers</a>都可以被认为是简单头部:</p>
diff --git a/files/zh-cn/glossary/正常模式/index.html b/files/zh-cn/glossary/sloppy_mode/index.html
index 3856bd5b35..24df3556d6 100644
--- a/files/zh-cn/glossary/正常模式/index.html
+++ b/files/zh-cn/glossary/sloppy_mode/index.html
@@ -1,7 +1,8 @@
---
title: 正常模式
-slug: Glossary/正常模式
+slug: Glossary/Sloppy_mode
translation_of: Glossary/Sloppy_mode
+original_slug: Glossary/正常模式
---
<p>因为翻译原因,正常模式也被翻译为——马虎模式/稀松模式/懒散模式</p>
diff --git a/files/zh-cn/glossary/speculative_parsing/index.html b/files/zh-cn/glossary/speculative_parsing/index.html
new file mode 100644
index 0000000000..6d3b064353
--- /dev/null
+++ b/files/zh-cn/glossary/speculative_parsing/index.html
@@ -0,0 +1,30 @@
+---
+title: 对页面预解析进行优化
+slug: Glossary/speculative_parsing
+translation_of: Glossary/speculative_parsing
+original_slug: Web/HTML/Optimizing_your_pages_for_speculative_parsing
+---
+<p>在传统的浏览器中,HTML 解析器运行于主线程之中,并且在遇到 &lt;/script&gt; 标签后会被阻塞,直到脚本从网络中被获取和执行。 Firefox 4 和后续的版本支持从主线程中分离的预解析技术。 当脚本在获取和执行的过程中,预解析技术能提前解析HTML文档。在Firefox 3.5 和 3.6中, HTML 解析器能够在文档流中预先加载脚本、层叠样式表和图片。然而, 在Firefox 4 和后续的版本中 HTML 解析器也预先运行HTML 树构建算法。 这一举措的优点是当预解析成功后,就没有必要再重新解析已经扫描过并且成功下载的脚本,层叠样式表和图片;缺点就是当预解析失败之后,有很多工作需要去做。</p>
+
+<p>这篇文档旨在帮助你避免预解析失败和页面加载变慢。</p>
+
+<h2 id="使预加载成功">使预加载成功</h2>
+
+<p>让脚本、层叠样式表和图片预加载成功的规则只有一条:</p>
+
+<ul>
+ <li>如果你使用 <code>&lt;base&gt;</code> 元素重载页面的基 URI,将这个元素放置到文档的非脚本部分。不要通过 <code>document.write()</code> 或者 <code>document.createElement() 添加</code>.</li>
+</ul>
+
+<h2 id="避免树构建器的输出丢失">避免树构建器的输出丢失</h2>
+
+<p>当document.write() 改变了文档树的状态时,树构建器的预构建过程会失败。 例如,当所有被<code>document.write() 插入的内容被解析之后&lt;/script&gt;</code> 标签后的预处理状态不再持有。 然而,只有不寻常地使用 <code>document.write()</code> 才会产生问题。 这些事情需要避免:</p>
+
+<ul>
+ <li>不要写不对称的文档树。<code>&lt;script&gt;document.write("&lt;div&gt;");&lt;/script&gt;</code> 很糟糕。<code>&lt;script&gt;document.write("&lt;div&gt;&lt;/div&gt;");&lt;/script&gt;</code> 则是可行的。</li>
+ <li>不要写未完成的标识。 <code>&lt;script&gt;document.write("&lt;div&gt;&lt;/div");&lt;/script&gt;</code> 很糟糕。</li>
+ <li>不要以回车结束内容。 <code>&lt;script&gt;document.write("Hello World!\r");&lt;/script&gt;</code> 很糟糕。​​​​​​​ <code>&lt;script&gt;document.write("Hello World!\n");&lt;/script&gt; </code>则是可行的。</li>
+ <li>注意即使对称的标签也可能导致文档的不对称。 比如:<code>head</code> 元素中的<code>&lt;script&gt;document.write("&lt;div&gt;&lt;/div&gt;");&lt;/script&gt;</code> i会被解析成 <code>&lt;script&gt;document.write("&lt;/head&gt;&lt;body&gt;&lt;div&gt;&lt;/div&gt;");&lt;/script&gt;</code> 因次文档是不对称的。</li>
+ <li>不要仅格式化部分表格。 <code>&lt;table&gt;&lt;script&gt;document.write("&lt;tr&gt;&lt;td&gt;Hello World!&lt;/td&gt;&lt;/tr&gt;");&lt;/script&gt;&lt;/table&gt;</code> 很糟糕。然而, <code>&lt;script&gt;document.write("</code><code>&lt;table&gt;</code><code>&lt;tr&gt;&lt;td&gt;Hello World!&lt;/td&gt;&lt;/tr&gt;</code><code>&lt;/table&gt;");&lt;/script&gt;</code> 则是可行的。</li>
+ <li>TODO: 在其它格式化元素中使用document.write。</li>
+</ul>
diff --git a/files/zh-cn/glossary/第一字节时间/index.html b/files/zh-cn/glossary/time_to_first_byte/index.html
index 8bcc8f0ce9..2fbd4fa934 100644
--- a/files/zh-cn/glossary/第一字节时间/index.html
+++ b/files/zh-cn/glossary/time_to_first_byte/index.html
@@ -1,7 +1,8 @@
---
title: 第一字节时间
-slug: Glossary/第一字节时间
+slug: Glossary/time_to_first_byte
translation_of: Glossary/time_to_first_byte
+original_slug: Glossary/第一字节时间
---
<p><strong>第一字节时间</strong>(TTFB)是指从浏览器请求页面到从浏览器接收来自服务器发送的信息的第一个字节的时间。这一次包括DNS查找和使用(三次)<a href="/en-US/docs/Glossary/TCP">TCP</a>握手和<a href="/en-US/docs/Glossary/SSL_Glossary">SSL</a>握手建立连接(如果请求是通过<a href="https://wiki.developer.mozilla.org/en-US/docs/Glossary/https">https</a>发出的)。</p>
diff --git a/files/zh-cn/glossary/类型转换/index.html b/files/zh-cn/glossary/type_conversion/index.html
index 7d1eb4c23e..863855caad 100644
--- a/files/zh-cn/glossary/类型转换/index.html
+++ b/files/zh-cn/glossary/type_conversion/index.html
@@ -1,11 +1,12 @@
---
title: Type conversion(类型转换)
-slug: Glossary/类型转换
+slug: Glossary/Type_Conversion
tags:
- Type
- 术语
- 类型
translation_of: Glossary/Type_Conversion
+original_slug: Glossary/类型转换
---
<p class="syntaxbox">类型转换(或类型变换;英文:Type conversion, typecasting)是指将数据由一种类型变换为另一种类型。在编译器自动赋值时,会发生<em>隐式转换</em>,但在代码中,也可以用一些写法强制要求进行<em>显式转换</em>。例如:在表达式 <code>5 + 2.0</code> 中,整数 <code>5</code> 被隐式转换为浮点数,但 <code>Number("0x11")</code> 和 "0x11" 则被显式转换为数字 17。</p>
diff --git a/files/zh-cn/glossary/xhtml/index.html b/files/zh-cn/glossary/xhtml/index.html
new file mode 100644
index 0000000000..276b4aed22
--- /dev/null
+++ b/files/zh-cn/glossary/xhtml/index.html
@@ -0,0 +1,16 @@
+---
+title: XHTML
+slug: Glossary/XHTML
+translation_of: Glossary/XHTML
+original_slug: XHTML
+---
+<h3 id="W3C.E6.A0.87.E5.87.86_XHTML" name="W3C.E6.A0.87.E5.87.86_XHTML">W3C标准 XHTML</h3>
+
+<h3 id="XHTML.28eXtensible_HyperText_Markup_Language.2C.E5.8F.AF.E6.89.A9.E5.B1.95.E8.B6.85.E6.96.87.E6.9C.AC.E6.A0.87.E8.AE.B0.E8.AF.AD.E8.A8.80.29" name="XHTML.28eXtensible_HyperText_Markup_Language.2C.E5.8F.AF.E6.89.A9.E5.B1.95.E8.B6.85.E6.96.87.E6.9C.AC.E6.A0.87.E8.AE.B0.E8.AF.AD.E8.A8.80.29">XHTML(eXtensible HyperText Markup Language,可扩展超文本标记语言)</h3>
+
+<p>2000年底,国际W3C(World Wide Web Consortium)组织公布发行了XHTML 1.0版本。XHTML 1.0是一种在HTML 4.0基础上优化和改进的的新语言,目的是基于XML应用。XHTML是一种增强了的HTML,它的可扩展性和灵活性将适应未来网络应用更多的需求。</p>
+
+<p> </p>
+
+<p>XHTML是在2000年1月26日被国际标准组织机构W3C(World Wide web Consortium)定为一个标准的,认为是HTML的一个最新版本,并且将逐渐替换HTML。现在所有的浏览器都支持XHTML,XHTML兼容 HTML 4.0。也有人认为XHTML就是HTML4.01。如果你在学习过程中自己编写了一个符合标准的站,你可以通过W3C的验证,验证通过后你将会得到一个标志,通常是XHTML1.0认证和CSS验证。大家可以去<a href="//www.w3.org">www.w3.org</a> 这个站点去验证你的站点,如果符合那两个规则则会分别给我们两段代码加到你的网页上向别人展示说明你采用了标准建站。<br>
+ <strong><font>请认真阅读XHTML相关知识和基础教程,以便您能准确的了解XHTML的新特性,以及应用技巧,还可以得到w3c的有力支持。</font></strong></p>