Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
我使用的是Hbuilder編輯器,在hbuilder中創建一個HTML文件。
在hbuilder中運行HTML文件
效果
<!DOCTYPE html>
<html>
<head>
<!--網頁的頭部 -->
</head>
<body>
<!--網頁內容 -->
</body>
</html>
<!-- --> 用于注釋代碼
基礎標簽
文本格式化
<i>武漢,加油!</i>
<em>湖北,加油!</em>
<strong>武漢,加油!</strong>
<q>HX是輕量編輯器和強大IDE的完美結合體。敏捷的性能,清爽的界面,強大的功能和于一身。</q>
<blockquote>
HX是輕量編輯器和強大IDE的完美結合體。敏捷的性能,清爽的界面,強大的功能和于一身。
</blockquote>
<code>var a = 1 </code>
實驗效果
標題段落
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>使用標題和段落</title>
</head>
<body>
<!-- 標題-->
<h1>武漢加油!</h1>
<h2>武漢加油!</h2>
<h3>武漢加油!</h3>
<h4>武漢加油!</h4>
<h5>武漢加油!</h5>
<h6>武漢加油!</h6>
<!--段落標簽-->
<p>武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!</p>
<hr > <!--水平分割線-->
<p>武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!武漢加油!</p>
<!-- 換行符-->
武漢加油!武漢加油!武漢加油!武漢加油!
<br>武漢加油!武漢加油!武漢加油!
</body>
</html>
塊元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>03</title>
</head>
<body>
<i style="background-color: blue;">武漢加油! 武漢加油! 武漢加油! 武漢加油! 武漢加油! </i>
<div style="background-color: aqua;">
武漢加油! 武漢加油! 武漢加油! 武漢加油! 武漢加油!
</div>
<div style="background-color: aqua;">
武漢加油! 武漢加油! 武漢加油! 武漢加油! 武漢加油!
</div>
<span style="background-color: blue;">
武漢加油! 武漢加油! 武漢加油! 武漢加油! 武漢加油!
</span>
<span style="background-color: blue;">
武漢加油! 武漢加油! 武漢加油! 武漢加油! 武漢加油!
</span>
</body>
</html>
最終效果
圖片
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>使用圖片</title>
</head>
<body>
hello
<img src="images/02.png" alt="風景圖" title="測試圖片" >
</body>
</html>
鏈接
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<a href="http://www.baidu.com" target="_blank">百度一下</a>
<a href="http://www.baidu.com" target="_parent">百度一下</a>
<a href="http://www.baidu.com" target="_search">百度一下</a>
<a href="http://www.baidu.com" target="_top">百度一下</a>
</body>
</html>
列表
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>列表</title>
</head>
<body>
<!--有序列表-->
<ol type="1">
<li>北京</li>
<li>上海</li>
</ol>
<ol type="A">
<li>北京</li>
<li>上海</li>
</ol>
<ol type="a">
<li>北京</li>
<li>上海</li>
</ol>
<!-- 無序列表-->
<ul type="disc">
<li>北京</li>
<li>上海</li>
</ul>
<ul type="circle">
<li>北京</li>
<li>上海</li>
</ul>
<ul type="square">
<li>北京</li>
<li>上海</li>
</ul>
</body>
</html>
表格
、語句
JavaScript 程序的執行單位為行(line),也就是一行一行地執行。一般情況下,每一行就是一個語句。
語句(statement)是為了完成某種任務而進行的操作,比如下面就是一行賦值語句。
var a = 1 + 3;
這條語句先用var命令,聲明了變量a,然后將1 + 3的運算結果賦值給變量a。
1 + 3叫做表達式(expression),指一個為了得到返回值的計算式。語句和表達式的區別在于,前者主要為了進行某種操作,一般情況下不需要返回值;后者則是為了得到返回值,一定會返回一個值。凡是 JavaScript 語言中預期為值的地方,都可以使用表達式。比如,賦值語句的等號右邊,預期是一個值,因此可以放置各種表達式。
語句以分號結尾,一個分號就表示一個語句結束。多個語句可以寫在一行內。
var a = 1 + 3 ; var b = 'abc';
分號前面可以沒有任何內容,JavaScript 引擎將其視為空語句。
;;;
上面的代碼就表示3個空語句。
表達式不需要分號結尾。一旦在表達式后面添加分號,則 JavaScript 引擎就將表達式視為語句,這樣會產生一些沒有任何意義的語句。
1 + 3;'abc';
上面兩行語句只是單純地產生一個值,并沒有任何實際的意義。
2、變量
2.1、概念
變量是對“值”的具名引用。變量就是為“值”起名,然后引用這個名字,就等同于引用這個值。變量的名字就是變量名。
var a = 1;
上面的代碼先聲明變量a,然后在變量a與數值1之間建立引用關系,稱為將數值1“賦值”給變量a。以后,引用變量名a就會得到數值1。最前面的var,是變量聲明命令。它表示通知解釋引擎,要創建一個變量a。
注意,JavaScript 的變量名區分大小寫,A和a是兩個不同的變量。
變量的聲明和賦值,是分開的兩個步驟,上面的代碼將它們合在了一起,實際的步驟是下面這樣。
var a; a = 1;
如果只是聲明變量而沒有賦值,則該變量的值是undefined。undefined是一個 JavaScript 關鍵字,表示“無定義”。
var a; a // undefined
如果變量賦值的時候,忘了寫var命令,這條語句也是有效的。
var a = 1;// 基本等同a = 1;
但是,不寫var的做法,不利于表達意圖,而且容易不知不覺地創建全局變量,所以建議總是使用var命令聲明變量。
如果一個變量沒有聲明就直接使用,JavaScript 會報錯,告訴你變量未定義。
x// ReferenceError: x is not defined
上面代碼直接使用變量x,系統就報錯,告訴你變量x沒有聲明。
可以在同一條var命令中聲明多個變量。
var a, b;
JavaScript 是一種動態類型語言,也就是說,變量的類型沒有限制,變量可以隨時更改類型。
var a = 1; a = 'hello';
上面代碼中,變量a起先被賦值為一個數值,后來又被重新賦值為一個字符串。第二次賦值的時候,因為變量a已經存在,所以不需要使用var命令。
如果使用var重新聲明一個已經存在的變量,是無效的。
var x = 1;var x; x // 1
上面代碼中,變量x聲明了兩次,第二次聲明是無效的。
但是,如果第二次聲明的時候還進行了賦值,則會覆蓋掉前面的值。
var x = 1;var x = 2;// 等同于var x = 1;var x; x = 2;
2.2、變量提升
JavaScript 引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運行。這造成的結果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫做變量提升(hoisting)。
console.log(a);var a = 1;
上面代碼首先使用console.log方法,在控制臺(console)顯示變量a的值。這時變量a還沒有聲明和賦值,所以這是一種錯誤的做法,但是實際上不會報錯。因為存在變量提升,真正運行的是下面的代碼。
var a;console.log(a); a = 1;
最后的結果是顯示undefined,表示變量a已聲明,但還未賦值。
3、標識符
標識符(identifier)指的是用來識別各種值的合法名稱。最常見的標識符就是變量名,以及后面要提到的函數名。JavaScript 語言的標識符對大小寫敏感,所以a和A是兩個不同的標識符。
標識符有一套命名規則,不符合規則的就是非法標識符。JavaScript 引擎遇到非法標識符,就會報錯。
簡單說,標識符命名規則如下。
下面這些都是合法的標識符。
arg0 _tmp $elem π
下面這些則是不合法的標識符。
1a // 第一個字符不能是數字 23 // 同上 *** // 標識符不能包含星號 a+b // 標識符不能包含加號 -d // 標識符不能包含減號或連詞線
中文是合法的標識符,可以用作變量名。
var 臨時變量 = 1;
JavaScript 有一些保留字,不能用作標識符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。
4、注釋
源碼中被 JavaScript 引擎忽略的部分就叫做注釋,它的作用是對代碼進行解釋。Javascript 提供兩種注釋的寫法:一種是單行注釋,用//起頭;另一種是多行注釋,放在/*和*/之間。
// 這是單行注釋/* 這是 多行 注釋 */
此外,由于歷史上 JavaScript 可以兼容 HTML 代碼的注釋,所以<!--和-->也被視為合法的單行注釋。
x = 1; <!-- x = 2; --> x = 3;
上面代碼中,只有x = 1會執行,其他的部分都被注釋掉了。
需要注意的是,-->只有在行首,才會被當成單行注釋,否則會當作正常的運算。
function countdown(n) { while (n --> 0) console.log(n); } countdown(3)// 2// 1// 0
上面代碼中,n --> 0實際上會當作n-- > 0,因此輸出2、1、0。
5、區塊
JavaScript 使用大括號,將多個相關的語句組合在一起,稱為“區塊”(block)。
對于var命令來說,JavaScript 的區塊不構成單獨的作用域(scope)。
{ var a = 1; } a // 1
上面代碼在區塊內部,使用var命令聲明并賦值了變量a,然后在區塊外部,變量a依然有效,區塊對于var命令不構成單獨的作用域,與不使用區塊的情況沒有任何區別。在 JavaScript 語言中,單獨使用區塊并不常見,區塊往往用來構成其他更復雜的語法結構,比如for、if、while、function等。
6、條件語句
JavaScript 提供if結構和switch結構,完成條件判斷,即只有滿足預設的條件,才會執行相應的語句。
6.1、if 結構
if結構先判斷一個表達式的布爾值,然后根據布爾值的真偽,執行不同的語句。所謂布爾值,指的是 JavaScript 的兩個特殊值,true表示真,false表示偽。
if (布爾值) 語句; // 或者if (布爾值) 語句;
上面是if結構的基本形式。需要注意的是,“布爾值”往往由一個條件表達式產生的,必須放在圓括號中,表示對表達式求值。如果表達式的求值結果為true,就執行緊跟在后面的語句;如果結果為false,則跳過緊跟在后面的語句。
if (m === 3) m = m + 1;
上面代碼表示,只有在m等于3時,才會將其值加上1。
這種寫法要求條件表達式后面只能有一個語句。如果想執行多個語句,必須在if的條件判斷之后,加上大括號,表示代碼塊(多個語句合并成一個語句)。
if (m === 3) { m += 1; }
建議總是在if語句中使用大括號,因為這樣方便插入語句。
注意,if后面的表達式之中,不要混淆賦值表達式(=)、嚴格相等運算符(===)和相等運算符(==)。尤其是賦值表達式不具有比較作用。
var x = 1;var y = 2; if (x = y) { console.log(x); }// "2"
上面代碼的原意是,當x等于y的時候,才執行相關語句。但是,不小心將嚴格相等運算符寫成賦值表達式,結果變成了將y賦值給變量x,再判斷變量x的值(等于2)的布爾值(結果為true)。
這種錯誤可以正常生成一個布爾值,因而不會報錯。為了避免這種情況,有些開發者習慣將常量寫在運算符的左邊,這樣的話,一旦不小心將相等運算符寫成賦值運算符,就會報錯,因為常量不能被賦值。
if (x = 2) { // 不報錯 if (2 = x) { // 報錯
至于為什么優先采用“嚴格相等運算符”(===),而不是“相等運算符”(==),請參考《運算符》章節。
6.2、if...else 結構
if代碼塊后面,還可以跟一個else代碼塊,表示不滿足條件時,所要執行的代碼。
if (m === 3) { // 滿足條件時,執行的語句 } else { // 不滿足條件時,執行的語句 }
上面代碼判斷變量m是否等于3,如果等于就執行if代碼塊,否則執行else代碼塊。
對同一個變量進行多次判斷時,多個if...else語句可以連寫在一起。
if (m === 0) { // ...} else if (m === 1) { // ...} else if (m === 2) { // ...} else { // ...}
else代碼塊總是與離自己最近的那個if語句配對。
var m = 1; var n = 2; if (m !== 1) if (n === 2) console.log('hello'); else console.log('world');
上面代碼不會有任何輸出,else代碼塊不會得到執行,因為它跟著的是最近的那個if語句,相當于下面這樣。
if (m !== 1) { if (n === 2) { console.log('hello'); } else { console.log('world'); } }
如果想讓else代碼塊跟隨最上面的那個if語句,就要改變大括號的位置。
if (m !== 1) { if (n === 2) { console.log('hello'); } } else { console.log('world'); }// world
6.3、switch 結構
多個if...else連在一起使用的時候,可以轉為使用更方便的switch結構。
switch (fruit) { case "banana": // ... break; case "apple": // ... break; default: // ...}
上面代碼根據變量fruit的值,選擇執行相應的case。如果所有case都不符合,則執行最后的default部分。需要注意的是,每個case代碼塊內部的break語句不能少,否則會接下去執行下一個case代碼塊,而不是跳出switch結構。
var x = 1; switch (x) { case 1: console.log('x 等于1'); case 2: console.log('x 等于2'); default: console.log('x 等于其他值'); }// x等于1// x等于2// x等于其他值
上面代碼中,case代碼塊之中沒有break語句,導致不會跳出switch結構,而會一直執行下去。正確的寫法是像下面這樣。
switch (x) { case 1: console.log('x 等于1'); break; case 2: console.log('x 等于2'); break; default: console.log('x 等于其他值'); }
switch語句部分和case語句部分,都可以使用表達式。
switch (1 + 3) { case 2 + 2: f(); break; default: neverHappens(); }
上面代碼的default部分,是永遠不會執行到的。
需要注意的是,switch語句后面的表達式,與case語句后面的表示式比較運行結果時,采用的是嚴格相等運算符(===),而不是相等運算符(==),這意味著比較時不會發生類型轉換。
var x = 1; switch (x) { case true: console.log('x 發生類型轉換'); break; default: console.log('x 沒有發生類型轉換'); }// x 沒有發生類型轉換
上面代碼中,由于變量x沒有發生類型轉換,所以不會執行case true的情況。這表明,switch語句內部采用的是“嚴格相等運算符”,詳細解釋請參考《運算符》一節。
6.4、三元運算符 ?:
JavaScript 還有一個三元運算符(即該運算符需要三個運算子)?:,也可以用于邏輯判斷。
(條件) ? 表達式1 : 表達式2
上面代碼中,如果“條件”為true,則返回“表達式1”的值,否則返回“表達式2”的值。
var even = (n % 2 === 0) ? true : false;
上面代碼中,如果n可以被2整除,則even等于true,否則等于false。它等同于下面的形式。
var even;if (n % 2 === 0) { even = true; } else { even = false; }
這個三元運算符可以被視為if...else...的簡寫形式,因此可以用于多種場合。
var myVar;console.log( myVar ? 'myVar has a value' : 'myVar does not have a value') // myVar does not have a value
上面代碼利用三元運算符,輸出相應的提示。
var msg = '數字' + n + '是' + (n % 2 === 0 ? '偶數' : '奇數');
上面代碼利用三元運算符,在字符串之中插入不同的值。
7、循環語句
循環語句用于重復執行某個操作,它有多種形式。
7.1、while 循環
While語句包括一個循環條件和一段代碼塊,只要條件為真,就不斷循環執行代碼塊。
while (條件) 語句;// 或者while (條件) 語句;
while語句的循環條件是一個表達式,必須放在圓括號中。代碼塊部分,如果只有一條語句,可以省略大括號,否則就必須加上大括號。
while (條件) { 語句; }
下面是while語句的一個例子。
var i = 0;while (i < 100) { console.log('i 當前為:' + i); i = i + 1; }
上面的代碼將循環100次,直到i等于100為止。
下面的例子是一個無限循環,因為循環條件總是為真。
while (true) { console.log('Hello, world'); }
7.2、for 循環
for語句是循環命令的另一種形式,可以指定循環的起點、終點和終止條件。它的格式如下。
for (初始化表達式; 條件; 遞增表達式) 語句// 或者for (初始化表達式; 條件; 遞增表達式) { 語句 }
for語句后面的括號里面,有三個表達式。
下面是一個例子。
var x = 3;for (var i = 0; i < x; i++) { console.log(i); }// 0// 1// 2
上面代碼中,初始化表達式是var i = 0,即初始化一個變量i;測試表達式是i < x,即只要i小于x,就會執行循環;遞增表達式是i++,即每次循環結束后,i增大1。
所有for循環,都可以改寫成while循環。上面的例子改為while循環,代碼如下。
var x = 3;var i = 0;while (i < x) { console.log(i); i++; }
for語句的三個部分(initialize、test、increment),可以省略任何一個,也可以全部省略。
for ( ; ; ){ console.log('Hello World'); }
上面代碼省略了for語句表達式的三個部分,結果就導致了一個無限循環。
7.3、do...while 循環
do...while循環與while循環類似,唯一的區別就是先運行一次循環體,然后判斷循環條件。
do 語句while (條件);// 或者do { 語句 } while (條件);
不管條件是否為真,do...while循環至少運行一次,這是這種結構最大的特點。另外,while語句后面的分號注意不要省略。
下面是一個例子。
var x = 3;var i = 0;do { console.log(i); i++; } while(i < x);
7.4、break 語句和 continue 語句
break語句和continue語句都具有跳轉作用,可以讓代碼不按既有的順序執行。
break語句用于跳出代碼塊或循環。
var i = 0;while(i < 100) { console.log('i 當前為:' + i); i++; if (i === 10) break; }
上面代碼只會執行10次循環,一旦i等于10,就會跳出循環。
for循環也可以使用break語句跳出循環。
for (var i = 0; i < 5; i++) { console.log(i); if (i === 3) break; }// 0// 1// 2// 3
上面代碼執行到i等于3,就會跳出循環。
continue語句用于立即終止本輪循環,返回循環結構的頭部,開始下一輪循環。
var i = 0;while (i < 100){ i++; if (i % 2 === 0) continue; console.log('i 當前為:' + i); }
上面代碼只有在i為奇數時,才會輸出i的值。如果i為偶數,則直接進入下一輪循環。
如果存在多重循環,不帶參數的break語句和continue語句都只針對最內層循環。
7.5、標簽(label)
JavaScript 語言允許,語句的前面有標簽(label),相當于定位符,用于跳轉到程序的任意位置,標簽的格式如下。
label: 語句
標簽可以是任意的標識符,但不能是保留字,語句部分可以是任意語句。
標簽通常與break語句和continue語句配合使用,跳出特定的循環。
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) break top; console.log('i=' + i + ', j=' + j); } }// i=0, j=0// i=0, j=1// i=0, j=2// i=1, j=0
上面代碼為一個雙重循環區塊,break命令后面加上了top標簽(注意,top不用加引號),滿足條件時,直接跳出雙層循環。如果break語句后面不使用標簽,則只能跳出內層循環,進入下一次的外層循環。
標簽也可以用于跳出代碼塊。
foo: { console.log(1); break foo; console.log('本行不會輸出'); }console.log(2);// 1// 2
上面代碼執行到break foo,就會跳出區塊。
continue語句也可以與標簽配合使用。
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) continue top; console.log('i=' + i + ', j=' + j); } } // i=0, j=0 // i=0, j=1 // i=0, j=2 // i=1, j=0 // i=2, j=0 // i=2, j=1 // i=2, j=2
上面代碼中,continue命令后面有一個標簽名,滿足條件時,會跳過當前循環,直接進入下一輪外層循環。如果continue語句后面不使用標簽,則只能進入下一輪的內層循環。
推薦閱讀:
「JavaScript 教程」入門篇-導論
「JavaScript 教程」數據類型-數組
「JavaScript 教程」數據類型-對象
詳解 js 閉包(圖文版)
js 中原型和原型鏈深入理解
SS樣式表是不區分大小寫, 建議全部小寫
注釋: /* 注釋內容 */
單位問題:CSS 建議都寫上單位
如何將樣式表加入您的網頁:
內聯定義即是在對象的標記內使用對象的style屬性定義適用其的樣式表屬性。
示例代碼:
<p style="color:#f00">這一行的字體顏色將顯示為紅色</p>
內部樣式塊對象 Embedding a Style Block
你可以在你的HTML文檔的<head>標記里插入一個<style>塊對象。
示例代碼:
<style type="text/css">
body{background:#fff;color:#000;}
p{font-size:14px;}
</style>
外部樣式表 Linking to a Style Sheet
你可以先建立外部樣式表文件*.css,然后使用HTML的link對象。
示例代碼:
<link rel="stylesheet" type="text/css" href="*.css" />
rel="stylesheet" 是指在HTML文件中使用的是外部樣式表;
type="text/css" 指明該文件的類型是樣式表文件;
使用@import命令導入外部CSS文件(兼容性差,有些瀏覽器不支持)
<style type="text/css">
@import url("*.css");
</style>
使用<!-- -->解決兼容性
對于不支持CSS樣式的瀏覽器, 將會把編寫的CSS代碼當成普通的字符串顯示在網頁中。
<style type="text/css">
<!--
h4{ /* 標記選擇器 */
color:red;
font-size:18px;
}
-->
</style>
<style type="text/css">
div{width:200px;}
img{float:right}
</style>
花括號(})前的分號可以省略,推薦還是加上
防止外部樣式亂碼
@charset "utf-8"
CSS樣式涉及到圖片的路徑格式:
background-image: url('/i/eg_bg_03.gif')
list-style-image:url("/i/arrow.gif");
W3C提供的CSS語法檢測網頁的網址如下:
http://jigsaw.w3.org/css-validator/
同義詞:
內聯元素:行內元素
CSS樣式遵循的原則:
先設置全局的; 從大往小寫
常用的全局樣式:
實例1:
body,ul,li,a,img{margin:0px;padding:0px;}
ul li{list-style:none;}
img{border:none;} /* 解決不同瀏覽器下圖片有無邊框問題 */
a:link,a:visited{text-decoration:none;color:#444;}
a:hover{color:#f00;}
.floatL{float:left;}
.floatR{float:right;}
.clear{clear:both;}
實例2:
/*重置css*/
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td {
margin: 0;
padding: 0;
}
body {
background: #fff;
color: #444866;
font-size: 12px;
font-family: "Arial", "Microsoft YaHei", "黑體", "宋體", sans-serif;
}
h1, h2, h3, h4, h5, h6 {
font-weight: normal;
font-size: 100%;
}
a {/*去掉默認的下劃線*/
color: #444866;
text-decoration: none;
}
img {/*去掉圖片的間隙*/
border: none;
vertical-align: middle;
}
ol, ul, li {/*去掉默認的小圓點*/
list-style: none;
}
table {/*表格樣式美化*/
border-collapse: collapse;
}
body{font-size:12px; color:#444; background-color:#f1f1f1;}
.weight{font-weight:bold;}
常用中文字體 Unicode 編碼
字體名稱 英文名稱 Unicode 編碼
宋體 SimSun B8BF53
新宋體 NSimSun B0B8BF53
黑體 SimHei ED1F53
微軟雅黑 Microsoft YaHei FAEF6FC5ED1
楷體_GB2312 KaiTi_GB2312 77F53_GB2312
隸書 LiSu B6E66
幼園 YouYuan E7C06
華文細黑 STXihei 4E87EC6ED1
細明體 MingLiU EC60EF53
新細明體 PMingLiU B0EC60EF53
任意字體轉Unicode編碼
事實上任何字體都能夠轉換為Unicode編碼
*請認真填寫需求信息,我們會在24小時內與您取得聯系。