HTML中設(shè)置lang屬性的意義
lang
屬性…<p>天</p>
<p lang="zh-CN">天</p>
結(jié)果為:
這是因為本頁面外層設(shè)置了 lang="ja"
,因此如果不設(shè)置 lang
屬性,就會繼承外層的設(shè)置,使瀏覽器默認使用日文字體。日文字體的「天」字上長下短,與中文習慣不符,影響用戶的閱讀體驗。
有人會說,我當然不會把頁面外層設(shè)置為日文。但是,如果頁面沒有設(shè)置 lang
屬性,就會使用瀏覽器或操作系統(tǒng)設(shè)置的語言。用戶的系統(tǒng)使用何種語言,是網(wǎng)頁開發(fā)者無法控制的。
又有人會說,「天」字只有兩橫的長短區(qū)別,差別并不大,有必要關(guān)注嗎?其實,這是很有必要的。
首先,雖然對于「天」字來說,日文字體與中文字體的差別并不大,但還有許多字差別較大,例如:
(圖片取自知乎問題「為何有時電子設(shè)備上『門』會顯示為『?冂丨』?」中亜恵恵阿由的回答)
其次,即使網(wǎng)頁使用日文字體,如果所有漢字都使用日文字體顯示,達到風格上的統(tǒng)一,在一定程度上尚可接受。但是,許多日文字體缺少中國大陸的簡體字,這些字會 fallback 到能顯示大陸簡體字的日文字體或大陸字體,從而出現(xiàn)字體混雜的問題。例如:
(圖中為阮一峰的網(wǎng)絡(luò)日志在日文系統(tǒng)中出現(xiàn)使用日文字體與字體混雜的問題的截圖)
這種問題只需要在網(wǎng)頁 html
標簽添加屬性 lang="zh-CN"
即可解決。
有人會說,為什么會有人使用日文系統(tǒng)瀏覽中文網(wǎng)頁呢?實際上,隨著國際交流與合作日益密切,出于工作和學(xué)習的原因,不少中國人會使用日文系統(tǒng),也有不少日本人會瀏覽中文網(wǎng)頁。而且,上述字體問題不僅會在日語環(huán)境下出現(xiàn),在其他外語環(huán)境下同樣會出現(xiàn)。因此,考慮這一問題是很有必要的。
lang="zh-CN"
, lang="zh-HK"
與 lang="zh-TW"
的差異<p lang="zh-CN">骨</p>
<p lang="zh-HK">骨</p>
<p lang="zh-TW">骨</p>
結(jié)果為:
這是因為中國大陸「骨」上方朝左,而香港、臺灣朝右;大陸、香港「骨」下方作兩橫,而臺灣作「點挑」。設(shè)置語言屬性后,瀏覽器分別應(yīng)用了三地的字體。
lang="zh-Hans"
與 lang="zh-Hant"
的差異<p lang="zh-Hans">骨</p>
<p lang="zh-Hant">骨</p>
結(jié)果為:
這是因為 zh-Hans
默認使用大陸字形,zh-Hant
默認使用臺灣字形。
lang="zh-HK"
與 lang="zh-Hant-HK"
有什么區(qū)別?一般情況下沒有區(qū)別,因為香港是使用繁體中文的地區(qū),所以 lang="zh-HK"
就隱含了 lang="zh-Hant-HK"
,二者的行為應(yīng)該是等同的。
但是,在目前最新版的 Mozilla Firefox 中二者行為不同:
<p lang="zh-HK"><q>你好</q></p>
<p lang="zh-Hant-HK"><q>你好</q></p>
結(jié)果為:
這可能只是一個 bug。
lang
屬性在西文中的差異<style>.upper { text-transform: uppercase; }</style>
<p class="upper" lang="en-US">shipping</p>
<p class="upper" lang="tr">shipping</p>
結(jié)果為:
這是因為土耳其文有帶點與不帶點兩種 i 字母,帶點的小寫 i 對應(yīng)的是帶點的大寫 ?。
lang="en-GB"
與 lang="en-US"
的差異<textarea lang="en-GB">center centre</textarea>
<textarea lang="en-US">center centre</textarea>
結(jié)果為:
這是因為在 Mozilla Firefox 中,拼寫檢查時會區(qū)分英國英語與美國英語。
lang
屬性指定地區(qū)了?有人可能認為,既然 lang
屬性會影響瀏覽器所使用的漢字字體,從而影響字形,那么只要用了相應(yīng)地區(qū)的漢字字體,字形自然也就確定了,所以也就不必再指定 lang
屬性了。
這種想法是不正確的。因為現(xiàn)代字體具有 OpenType 的 locl 特性,會根據(jù) lang
屬性改變字形。
<style>.font-k { font-family: 'Source Han Sans SC', sans-serif; }</style>
<p class="font-k">天</p>
<p class="font-k" lang="zh-CN">天</p>
結(jié)果為:
這是因為外層設(shè)置了 lang="ja"
,因此如果不設(shè)置 lang
屬性,就會繼承外層的設(shè)置,使瀏覽器默認使用日文字形。雖然 Source Han Sans SC 默認為中國大陸字形,但是由于 OpenType 的 locl 特性,也會自動變?yōu)槿瘴淖中巍?/p>
有人會說,我當然不會把頁面外層設(shè)置為日文。但是,需要再次重申,如果頁面沒有設(shè)置 lang
屬性,就會使用瀏覽器或操作系統(tǒng)設(shè)置的語言。用戶的系統(tǒng)使用何種語言,是網(wǎng)頁開發(fā)者無法控制的。
還有一個更常見的現(xiàn)象是引號問題。
<div lang="en">
<p>“你好”</p>
<p lang="zh-CN">“你好”</p>
</div>
結(jié)果為:
這是因為 Unicode 中并不區(qū)分全角與半角引號,具體的顯示效果會由于 lang
屬性的不同而不同。
lang="zh"
還是 lang="zh-CN"
?從效果上看,二者并沒有區(qū)別,都會使用大陸字形顯示漢字。因此,設(shè)置哪個都是沒有問題的。
但是,如果網(wǎng)頁是簡繁混排的,即同一網(wǎng)頁中還會出現(xiàn) lang="zh-HK"
或 lang="zh-TW"
,則為了代碼的可讀性與可維護性,應(yīng)該使用 lang="zh-CN"
。
例如,使用楷體排版的多語言網(wǎng)頁可以這樣設(shè)置 CSS:
:lang(zh), :lang(ja), :lang(ko) { text-align: justify; }
:lang(zh-CN) { font-family: KaiTi, cursive; }
:lang(zh-TW) { font-family: DFKai-SB, cursive; }
:lang(zh-HK) { font-family: DFPHKStdKai-B5, cursive; }
西文文本不宜使用兩側(cè)對齊,否則會造成川流現(xiàn)象;中文、日文、韓文可以使用兩側(cè)對齊。這時,使用 lang="zh"
,可以一次性選擇所有中文變體,即所有以 zh
起始的 lang
屬性。
如果將 lang="zh-CN"
改為 lang="zh"
,則上述 CSS 代碼中的 lang="zh-CN"
也必須改為 lang="zh"
。在維護過程中,有可能因為維護人員的疏忽,規(guī)則之間被調(diào)換了順序,寫作:
:lang(zh), :lang(ja), :lang(ko) { text-align: justify; }
:lang(zh-TW) { font-family: DFKai-SB, cursive; }
:lang(zh-HK) { font-family: DFPHKStdKai-B5, cursive; }
:lang(zh) { font-family: KaiTi, cursive; }
這樣就產(chǎn)生了 bug,因為這會導(dǎo)致 :lang(zh-TW)
與 :lang(zh-HK)
兩條規(guī)則都被 :lang(zh)
覆蓋。
lang="zh-Hant"
類屬性,還是應(yīng)該使用 lang="zh-TW"
類屬性?如前文所述,這在顯示效果上是沒有差別的,因為 zh-Hant
默認使用臺灣字形。但是,二者卻有語義上的差別。
如果網(wǎng)頁內(nèi)容是一篇用現(xiàn)代文體寫成的、使用繁體字的、講述古代文化的文章,其地域性并不強,并不能直接看出是臺灣、香港,或是其他使用繁體字的地區(qū)的文章,因此應(yīng)該使用 lang="zh-Hant"
。同理,如果這樣的文章使用簡體字寫成,其地域性并不強,并不能直接看出是來自中國大陸,還是其他使用簡體字的地區(qū),因此應(yīng)該使用 lang="zh-Hans"
。
而如果網(wǎng)頁內(nèi)容是一篇與現(xiàn)代生活緊密相關(guān)的文章,則通常需要指明地區(qū)。這是因為不同地區(qū)的用字、用詞與寫作習慣均存在差異。例如,在用字上,中國大陸、香港「著」和「著」音義均不同,而臺灣則一律用「著」;在用詞上,中國大陸稱「摩托車」,香港稱「電單車」,而臺灣稱「機車」。這時就應(yīng)該使用 lang="zh-CN"
, lang="zh-HK"
, lang="zh-TW"
等屬性。
lang="zh-Hant"
使用香港或韓國字形?zh-Hant
默認使用臺灣字形。但是有人會說,自己的頁面就是需要設(shè)置 lang="zh-Hant"
,但是又不想使用臺灣字形。這時可以使用 CSS 的 font-language-override
屬性。
<style>
.glyph-hk:lang(zh-Hant) { font-language-override: "ZHH"; }
.glyph-kr:lang(zh-Hant) { font-language-override: "KOR"; }
</style>
<p lang="zh-Hant">霄</p>
<p class="glyph-hk" lang="zh-Hant">霄</p>
<p class="glyph-kr" lang="zh-Hant">霄</p>
結(jié)果為:
font-language-override
屬性的常用取值如下:
ZHS
ZHT
ZHH
KOR
JAN
cdo
, cjy
, cmn
, cnp
, cpx
, csp
, czh
, czo
, gan
, hak
, hsn
, lzh
, mnp
, nan
, wuu
, yue
等起始的屬性?這有兩個原因。
首先是出于兼容性的考量,因為只有一部分較新的瀏覽器支持這些屬性。
例如,吳語維基百科設(shè)置了 lang="wuu"
。對于日文系統(tǒng),在目前最新版的 Edge 瀏覽器中,頁面會出現(xiàn)字體混雜的問題。
(圖中為吳語維基百科的《徐家匯》頁面在日文系統(tǒng)中出現(xiàn)字體混雜的問題的截圖)
這是因為 Edge 不能識別 wuu
這類屬性。由于系統(tǒng)語言為日語,因此 Edge 優(yōu)先使用日文字體顯示。Edge 默認的日文字體是 Meiryo 字體,該字體缺少中國大陸的簡體字,因此 fallback 到宋體,從而出現(xiàn)字體混雜的問題。
當然,由于吳語維基百科使用吳語,與通常所指的漢語并不等同,因此確實需要使用 wuu
這一屬性;而一般的漢語頁面使用以 zh
起始的屬性即可,不需要使用 cmn
。這就涉及到第二個原因。
根據(jù)中國開發(fā)者的習慣,在編寫中文頁面時,通常會認為頁面記錄的是「漢語」,而不是「官話」。這是因為在中國人通常的觀念中,與「英語」、「日語」等相對的是「漢語」,而「官話」則與「粵語」、「吳語」等相對。如果頁面使用以 zh
起始的屬性,更能反映這樣的語義。而如果編寫的頁面中同時出現(xiàn)了普通話與粵語,這時對普通話內(nèi)容使用以 cmn
起始的屬性,對粵語內(nèi)容使用以 yue
起始的屬性,是較好的選擇。
寫一個觸發(fā)定時自動更新的php文件,新建一個php文件,內(nèi)容如下,標題為autoindex.php,把它放到plus文件夾中。
<?php
function sp_input( $text )
{
$text = trim( $text );
$text = htmlspecialchars( $text );
if (!get_magic_quotes_gpc())
return addslashes( $text );
else
return $text;
}
$autotime = 120;//自動更新時間,單位為秒
$fpath = "../data/last_time.inc";//記錄更新時間文件,如果不能達到目的,請檢查是否有讀取權(quán)限。
include( $fpath );
if( empty($last_time))
$last_time = 0;
if( sp_input($_GET['renew'])=="now")
$last_time = 0;
if((time()-$last_time)>=$autotime )
{
define('DEDEADMIN', ereg_replace("[/\\]{1,}",'/',dirname(__FILE__) ) );
require_once(DEDEADMIN."/../include/common.inc.php");
require_once(DEDEINC."/arc.partview.class.php");
/*
$row = $dsql->GetOne("Select * From dede_homepageset");
$dsql->Close();
$templet=$row['templet'];
$position=$row['position'];
*/
$templet = “default/index.htm”;//這里是首頁模板位置,當前是dede默認首頁位置。
$position = "../index.html";
$homeFile = dirname(__FILE__)."/".$position;
$homeFile = str_replace("\\", "/", $homeFile );
$homeFile = str_replace( "http://", "/", $homeFile );
$pv = new PartView();
$pv ->SetTemplet( $cfg_basedir.$cfg_templets_dir."/".$templet );
$pv -> SaveToHtml( $homeFile );
$pv -> Close();
$file = fopen( $fpath, "w");
fwrite( $file, "<?php\n");
fwrite( $file,"\$last_time=".time().";\n");
fwrite( $file, '?>' );
fclose( $file );
}
?>
在首頁的模版代碼head標簽中引入觸發(fā)文件代碼:
<script src="/plus/autoindex.php" type="text/javascript"></script>
然后手動更新一下首頁,接下來在設(shè)置的時間過了以后如果有用戶訪問首頁就會觸發(fā)自動更新文件,首頁就會自動更新一次。
]]>把需要轉(zhuǎn)的CHM文件放到任意盤的根目錄下,并且新建一個空的目錄用于存放轉(zhuǎn)換后的文件。我這里以E盤為例。把11.chm文件轉(zhuǎn)成HTML后保存在CHM文件夾里面。
WIN鍵+R打開運行窗口,輸入CMD然后回車
這時會彈出DOS窗口。輸入下面命令,
hh -decompile e:\chm e:\11.chm
然后回車,等待一會。
搞定。
]]>
早前在知乎上有網(wǎng)友提問,大家都給存小電影的文件夾取什么名字,其中就有一條回答是“JAVA”,這個名稱的解釋是:JAVA=Japanese Adult Video Album。而當時的知乎,用戶又以互聯(lián)網(wǎng)相關(guān)從業(yè)人員居多,所以這條答案得到了不少的支持。從此,JAVA除了是一種編程語言外,也成了比較內(nèi)涵的詞語,不過一些年輕人并不了解這一來歷。當然,還有一種簡單粗暴的說法是,JAVA之中藏有AV,所以比較內(nèi)涵。
懂了懂了,JAVA和MySQL內(nèi)含大意
至于MySQL,它的含義在近幾天非常應(yīng)景,與JAVA展開成四個單詞不同,MySQL可直接用拼音輸入法來玩,就是“沒壓歲錢了”。所以如果你有哥哥姐姐是程序員的話,討要壓歲錢的時候不妨說自己今年準備學(xué)習MySQL,既顯得自己勤奮好學(xué),紅包要得也文藝委婉。不過一般人根本就不懂這些江湖“黑話”,你這樣說的時候多半會讓自己變成火星人,所以還是“說人話”比較好。
PS:其實最內(nèi)涵的還是HTML、CSS
]]><!doctype html>
<html>
<head>
<meta charset="gb2312">
<title>無標題文檔</title>
</head>
<style>
* {margin: 0px;padding: 0px;outline:none;border:0px;}
input {border:0px; font-size:12px}
img{margin:0px; padding:0px; border:0px}
body {font-family: "宋體", Arial, "微軟雅黑";font-size: 12px;color: #333;behavior:url("css/csshover.htc"); /*調(diào)用該htc文件,使ie6下支持div:hover屬性*/
background:#fff;}
ul {list-style-type: none;}
a {text-decoration:none}
html {overflow-x:hidden;overflow-y:auto;}
/* 標準盒模型 */
.ttl{height:18px;}
.ctt{height:auto;padding:6px;clear:both;border-top:0;}
.w670{margin:2px 0;clear:both;width:670px;/*滑動門的寬度*/}
/* TAB 切換效果 */
.tb_{height:36px; border-bottom:#f60 6px solid ;}
.tb_ ul{height:30px;}
.tb_ li{float:left;cursor:pointer;margin-right:4px; margin-left:0px;font-family:"微軟雅黑"; font-size:16px;}
/* 控制顯示與隱藏css類 */
.normaltab { padding:10px 10px 10px 10px;}
.hovertab { float:left;padding:10px 10px 10px 10px;background:#f60; margin-top:0px;}
.dis{display:block;}
.dis li{margin-top:10px; line-height:20px; font-size:14px; font-family:"微軟雅黑"; border-bottom:#f60 1px dotted}
.dis span{ float:right; padding-right:8px;}
.undis{display:none;}
</style>
<script type="text/javascript" language="javascript">
//<!CDATA[
function g(o){return document.getElementById(o);}
function HoverLi(n){
//如果有N個標簽,就將i<=N;
for(var i=1;i<=8;i++){g('tb_'+i).className='normaltab';g('tbc_0'+i).className='undis';}g('tbc_0'+n).className='dis';g('tb_'+n).className='hovertab';
}
//如果要做成點擊后再轉(zhuǎn)到請將<li>中的onmouseover 改成 onclick;
//]]>
</script>
<body>
<div id="tb_" class="tb_">
<ul>
<li id="tb_1" class="hovertab" onclick="x:HoverLi(1);">
全區(qū)</li>
<li id="tb_2" class="normaltab" onclick="i:HoverLi(2);">
市中心</li>
<li id="tb_3" class="normaltab" onclick="a:HoverLi(3);">
西北面</li>
<li id="tb_4" class="normaltab" onclick="o:HoverLi(4);">
東北面</li>
<li id="tb_5" class="normaltab" onclick="g:HoverLi(5);">
西南面</li>
<li id="tb_6" class="normaltab" onclick="z:HoverLi(6);">
東南面</li>
<li id="tb_7" class="normaltab" onclick="z:HoverLi(7);">
st.Albert</li>
<li id="tb_8" class="normaltab" onclick="z:HoverLi(8);">
Sherwood Park</li>
</ul>
</div>
<div class="ctt">
<div class="dis" id="tbc_01">這里是1111111111111111111111</div>
<div class="undis" id="tbc_02">這里是2222222222222222222</div>
<div class="undis" id="tbc_03">這里是3333333333333 </div>
<div class="undis" id="tbc_04">這里444444444444444444444444444444444</div>
<div class="undis" id="tbc_05">這里是555555555555555555</div>
<div class="undis" id="tbc_06">這里是66666666666666666666666 </div>
<div class="undis" id="tbc_07">這里是777777777777777777777777777 </div>
<div class="undis" id="tbc_08">這里是88888888888888888888888888888
</div>
</div>
</body>
</html>
]]>