2010年10月28日 星期四

網站為什麼都是亂碼?!utf-8與big5傻傻分不清楚!

網站為什麼都是亂碼?!utf-8與big5傻傻分不清楚!


今天製作一個網頁的uft-8,結果在準備收工時拿到IE8底下測試,熊熊發現網頁完全空白!而且明明加入了meta標籤,預設的編碼還是big5~!為了解決這問題,改了好幾次,最後發現的結果又是IE與眾不同......囧rz

解決方法如以下文字引用: http://businesswing.net/php/3-4/ ,2010.10.28

資訊小百科:網頁為何會有亂碼或空白頁? html會先依文件內容本身編碼選擇編碼,但IE(包含IE6至IE8)在網頁沒有指定編碼的語法下會以該電腦預設編碼為預設編碼。所以UTF-8編碼網 頁若沒有指定編碼會變成亂碼。 若網頁有<meta http-equiv=”Content-Type” content=”text/html; charset= UTF-8″> 標籤,瀏覽器會依照標籤重新設定編碼方式,所以若標籤內描述的編碼與文件內容編碼不一致,網頁就會出現亂碼。 Firefox或其他非IE瀏覽器在解析編碼時,只要找到meta標籤,就會重新定義網頁編碼,不論meta標籤的順序在title標籤之前或後;而IE 找到meta標籤後,開始定義網頁編碼,在這一行之前則依照電腦預設編碼,換言之,若meta標籤在title標籤之後,解析title時會出現編碼不一 致的情況,而會以空白頁的方式顯示。 所以,當您要設計UTF-8網頁,為了避免瀏覽器瀏覽出現亂碼或空白頁,請您確認以下三個步驟:
1.確認網頁文件編碼為UTF-8 
2.確認網頁有加上<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

3.確認上述meta標籤在title標籤之前
另外,根據某網頁敘述(看太多頁面,忘記了~"~),utf-8在meta當中最好不要減省為utf8,有些瀏覽器會無法判讀!

網站製作注意事項

今天製作一個網頁的uft-8,結果在準備收工時拿到IE8底下測試,熊熊發現網頁完全空白!而且明明加入了meta標籤,預設的編碼還是big5~!為了解決這問題,改了好幾次,最後發現的結果又是IE與眾不同......囧rz



解決方法如以下文字引用: http://businesswing.net/php/3-4/ ,2010.10.28



資訊小百科:網頁為何會有亂碼或空白頁?
html會先依文件內容本身編碼選擇編碼,但IE(包含IE6至IE8)在網頁沒有指定編碼的語法下會以該電腦預設編碼為預設編碼。所以UTF-8編碼網
頁若沒有指定編碼會變成亂碼。
若網頁有<meta http-equiv=”Content-Type” content=”text/html; charset=
UTF-8″>
標籤,瀏覽器會依照標籤重新設定編碼方式,所以若標籤內描述的編碼與文件內容編碼不一致,網頁就會出現亂碼。
Firefox或其他非IE瀏覽器在解析編碼時,只要找到meta標籤,就會重新定義網頁編碼,不論meta標籤的順序在title標籤之前或後;而IE
找到meta標籤後,開始定義網頁編碼,在這一行之前則依照電腦預設編碼,換言之,若meta標籤在title標籤之後,解析title時會出現編碼不一
致的情況,而會以空白頁的方式顯示。
所以,當您要設計UTF-8網頁,為了避免瀏覽器瀏覽出現亂碼或空白頁,請您確認以下三個步驟:


1.確認網頁文件編碼為UTF-8


2.確認網頁有加上<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>



3.確認上述meta標籤在title標籤之前


另外,根據某網頁敘述(看太多頁面,忘記了~"~),utf-8在meta當中最好不要減省為utf8,有些瀏覽器會無法判讀!

2010年10月18日 星期一

麻煩的DNS設定~"~,詳細理解請點內文前二行的連結

和IPv4同樣的需要有正反解,比較複雜一些,請發揮耐心與嘗試錯誤的勇氣吧!

鳥哥的私房菜 http://linux.vbird.org/linux_server/0350dns.php#DNS_Zones

對了,除了鳥哥,還有個地方可以去看看:TWNIC的dns教學計畫 http://dns-learning.twnic.net.tw/
以下整理內容僅獻給健忘症的自己~
2010.10.19後記:剛好學校的dns server掛掉,結果上網google關鍵字centos dns,赫然發現自己很久以前寫下的那篇居然比鳥哥還前面!真是太神奇了! 所以,也把那篇連結放進來這裡囉,呵呵! http://blog.xuite.net/zoro00000/blog/20712222
還有還有,這篇寫得真好! http://blog.weithenn.org/2009/04/centosbind9-domain-nameip.html

    首先,先進行本機/etc/hosts的設定:
vi /etc/hosts,加入以下內容:
    ::1    localhost6.localdomain6 localhost6                           <----本機的正反解
    2001:288:4677::225      www.ipv6.jges.mlc.edu.tw www   <-----主機名稱的正反解紀錄,請輸入自己的IP位址與DNS解析名稱

----------------------------------------------------------1.預設環境----------------------------------------------------------------------
確定電腦能上網了後,如果是要弄內部虛擬機器互連之類的,記得先進入/etc/resolv.conf 修改nameserver的IP變成你準備設置Dns主機的位置喔!這個檔案一般來說剛把主機設定好就會順帶寫好,如果忘記了就自己快點加上吧~

vi /etc/resolv.conf

nameserver 163.19.1.1
nameserver 168.95.1.1
domain jges.edu.tw
search  jges.edu.tw
簡單說明一下:
nameserver就是上層單位的Dns位置,最多三個,從上而下進行逐層的搜尋,都找不到就不能dns啦~要設對才能上網喔! 
domain則是當輸入的名稱例如www無法被解析時,自動會被加入後面字串再嘗試解析,也就是在這邊會變成www.jges.edu.tw 
search的功能基本上和domain相似,不過domain是本地端有優先權,其他想自動加入的就都可以掛在search底下發揮囉.
-----------------------------------------------------------------------------------------------------------------------------------
還有還有,像ubuntu之類沒有預設開啟DNS的機器上記得要先輸入service bind9 start開啟bind的功能啦~(bind後的數字自己看看版本吧,建議使用Bind9,bind的維護網站:http://www.isc.org/software/bind )

1.設定檔傳統上是/etc/named.conf ,CentOS現在為了安全性放在/var/named/chroot
2.一般來說, CentOS 的預設目錄是這樣的:
    * /var/named/chroot/etc/named.conf :這就是我們的設定檔啦!
    * /etc/named.conf :這也是我們的設定檔啦!
    * /etc/sysconfig/named :是否啟動 chroot 及額外的參數,就由這個檔案控制;
    * /var/named/ :資料庫檔案預設放置在這個目錄
    * /var/run/named :named 這支程式執行時預設放置 pid-file 在此目錄內。
    順帶一提,ubuntu底下的檔案都是放在/etc/bind喔~
3. DNS 伺服器的架設需要上層 DNS 的授權才可以成為合法的 DNS 伺服器。
4. named 是否啟動成功務必要查閱 /var/log/messages 內的資訊!

一個完整的DNS設定案例內容需包含六個檔案,例如dns1位於163.19.1.1的整個class c領域jges.edu.tw:
 
  1. named.conf       :設定檔
  2. jges.fwd       :jges.edu.tw 的正解
  3. jges.rev  :163.19.1.0/24 的反解
  4. named.root       :root (.) 的資料庫
  5. localhost.fwd  :localhost 的正解
  6. localhost.rev    :127.0.0.1/24 的反解
可對應的主機名稱可能有www.jges、dns.jges、www1.jges、www2.jges、server.jges、ftp.jges、ftp2.jges、...
底下預設幾台主機來對應:
163.19.1.1    163.19.1.2    dns1和dns2
163.19.1.3    163.19.1.4     www.jges dns.jges linux.jges
163.19.1.30   mail
163.19.1.31  imap(第二台mail主機)
163.19.1.50  dept1.jges.edu.tw網域的第一台dns
163.19.1.51  dept1.jges.edu.tw網域的第二台dns
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Bind這個DNS程式的設定檔named.conf 主要的作用在於定義
named的功能項目
內容可包含4個部分,分別為:
*options
*關於 .(root) 的內容
*關於 localhost 的正反解
*關於其他 domain 的正反解
然後,在named.conf當中,可設定的伺服器型態有5種: (也就是等一下會看到的type)

master: 主要伺服器,在網域中負責名稱解析。
slave: 避免master發生故障時影響網路上的名稱解析工作,可以安裝其他的DNS伺服器,並會定期複製master中的資料。
stub: 與slave類似,但只會複製master的NS紀錄,而非所有區域(zone)資訊。
hint: 表示為root伺服器。
forward: 可將來自用戶端的名稱解析要求代為轉送至其他伺服器。 (本文未提,流量大時比較好用喔!)
vi /var/named/chroot/named.conf                      
 (這個檔案中註解寫法是//)(;代表到此為止,每行都要加喔!)
 
options {
        directory       "/var/named";                                    //指定Server中有關的zone file的設定檔儲存路徑
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        pid-file        "/var/run/named/named.pid";           //代表dns服務的pid名稱,通常用預設
        forwarders     { 163.19.1.1;168.95.1.1; };
        allow-query    { any; };  // 是否允許被查詢?當然要可以被查詢;
        allow-transfer { none; }; // 一定要寫,定義哪些IP可與此DNS做AXFR,是否允許傳送 zone ,預設為none,不寫就是被看光啦~
};
 
include "/etc/rndc.key";  // 關於 DNS 伺服器的一些加密資料,看不懂就先忽略!
 
// 關於 root (.) 的設定喔:
zone "." {
        type hint;                // 特殊的類別!專給 root (.) 用的,表示如果沒有資料就可以到根伺服器查詢
        file "named.root";        // 就是檔名的定義啦!
};
 
// 關於本機 localhost 的正反解
zone "localhost" {
        type master;
        file "localhost.fwd";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "localhost.rev";
};
 
// 這裡規範出我們的 jges.edu.tw 領域名正反解,in-addr.arpa是固定的反解格式,不可改
zone "jges.edu.tw" {
        type master;
        file "jges.fwd";
        allow-transfer {163.19.1.2/32;};   //可加可不加,看有沒有slave的需求.
};
zone "1.19.163.in-addr.arpa" {
        type master;
        file "jges.rev";        allow-transfer {163.19.1.2/32;};
};
zone "jges.edu.tw" {                    
//這串字只是為了做slave的例子才加入的,請寫入在163.19.1.2這第二台dns上
       type slave;             masters { 163.19.1.1; };              
       file "slave.jges.fwd";                    //這邊是指slave這台電腦的dns備份檔要放哪邊 
       allow-transfer {none;};};                                
zone "1.19.163.in-addr.arpa" {       //這串字只是為了做slave的例子才 加入的,請寫入在 163.19.1.2這第二台dns上
       type slave;             masters { 163.19.1.1; };              
       file "slave.jges.rev";                    
       allow-transfer {none;};};      
                   
 allow-transfer參數可以在單一的zone內設定定義喔!
還有上面的file"檔名"當中的檔名都可以自己亂取,不過要記得就一定要做好相對名稱的檔案就是啦~
反解的例子:163.19.1.xx這個區段的反解寫法就一定是1.19.163.in-addr.arpa,不能亂改喔!
arpa 是美國國防部計畫的縮寫,in-addr是Internet Address的意思,如果是用於ipv6的反解,請將in-addr改成ip6

-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
接下來是named.root這個檔,大家都用一樣的就好了,下載網址:ftp://rs.internic.net/domain/named.root ,這個檔很重要,DNS解析查詢都會先到這個檔案裡!
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
呃,底下會看到一個萬惡的@符號,這其實就是您自己在named.conf當中定義的那個領域啦!就是$ORIGIN後面接的東西,也就是說在這裡是zone"xxxx"當中那個xxxx的意思!
這個符號花了我很久很久很久的時間我才看懂..........奇怪了...除了自己笨之外,可能都要怪鳥哥沒有寫$ORIGIN.......冏
還有IN,代表的是internet類別的意思.(目前除了IN,也別無其他類型囉)
------------------------------------------------------------分隔線上面是重要的說明-------------------------------------------------
典型的SOA RR如下:
xxx.edu.tw 1D IN SOA ns1.xxx.edu.tw HostMaster.xxx.edu.tw
-------------------------------------------------------------------------------
vi /var/named/chroot/var/named/jges.fwd             (這種檔案中註解寫法是;)
 
$TTL    86400                          ;整個程式的宣告時間,以秒為單位的資源記錄時間喔
$ORIGIN jges.edu.tw.               ;整個程式的宣告開頭網域,也可以不用設定,說明底下沒有使用.而省略的網域為何,可以在不同段落改變宣告成自己需要的子網域,沒設定就以named.conf中的zone為準.建議一定加上.
;下面這行請照抄,翻譯成文字也就是 jges.edu.tw. IN SOA jges.edu.tw. 後面接上root的email位址.(據說SOA後面接的jges.edu.tw.是給做slave dns的機器看的,所以在這邊應該改成dns1.jges.edu.tw.或更偷懶的dns1
@    IN   SOA  dns1.jges.edu.tw.  root.jges.edu.tw.  
;這邊有個該死的 " . "  ,這東西一定要加喔!如果忘記加後面會自動加上zone的名稱!例如localhost忘記加.就自動被變成 了localhost.localhos.啦!當然,底下可以看到例如www之類後面不加點的也是這個.的妙用~請參照前幾行寫的$ORIGIN 
              (                  
                20100705001  ;Serial  , 僅作為序號而已,不過一更新請記得就要做調整,不然slave可是不會來抓的喔!
               28800       ; Refresh slave 伺服器的更新時間
               14400       ; Retry   當 slave 主機更新失敗,多久再重新更新一次
               720000      ; Expire  重複 retry 多久後就宣告不治....不再更新
               86400 )     ; Minimum 可視為 TTL ,尤其是你沒有設定 $TTL 時
 
@           IN   NS   localhost.  ;這邊看@不順眼可以改成localhost.或想寫成 @ IN NS @ 也行!
localhost. IN   A    127.0.0.1
;(這邊的意思是此zone的DNS伺服器主機名稱與 IP 的相互對應,確保localhost可以正確解出127.0.0.1)
應該要有的對應模式如下(有NS就有A) 

jges.edu.tw. IN NS dns1.jges.edu.tw. ;<==這邊的dns1.jges.edu.tw.就是您用來登記在上層單位DNS的名字喔!不能亂改
jges.edu.tw. IN NS dns2.jges.edu.tw.
dns1.jges.edu.tw. IN A 163.19.1.1
dns2.jges.edu.tw. IN A 163.19.1.2
;-----------循序負載分攤功能(round robin),可以用來減輕單一server被查詢到的負擔,也可以做多個異地備援喔!---------
www        IN    A    163.19.1.3
www        IN    A    163.19.1.4
www        IN    A    140.113.40.35       ;<====這邊假設是放到交大做備援
;------------------別名CNAME的用法(盡量用 A來代替CNAME),這邊的3600是獨立的TTL的意思--------------------
www2.jges.edu.tw. 3600 IN A 163.19.1.1
ftp.jges.edu.tw. 3600 IN CNAME www2.jges.edu.tw.
;--Mail Server的用法,不加也可以,不過寄信查詢一定會先查MX,再查A,所以可以用來過濾信件,而不掛MX也會影響效能---
@        IN    MX    10    mail  ;<====這邊的10和20是收寄信順位喔~數字小的會先收到信,如果數字相同就二選一收到
@        IN    MX    20    imap
mail     IN    A    163.19.1.30
imap    IN    A    163.19.1.31
;-----------------------底下是加上子網域dns伺服器的寫法,這邊的子網域是dep1.jges.edu.tw-------------------
$ORIGIN dep1.jges.edu.tw.
                IN NS dns1
                IN NS dns2
dns1         IN A 163.19.1.50
dns2         IN A 163.19.1.51


;*正解檔裡面好多個A,後面的IP到底能不能重覆呢?根據老師的說法是可以的,不過聽說最好不要.
------以上就是基本正解常用的囉,非寫反解檔不可的請看底下直接依樣畫葫蘆囉,差別最大的是PTR和ORIGIN後面接的東東------
vi /var/named/chroot/var/named/jges.rev
$TTL    86400
$ORIGIN 1.19.163.in-addr.apra.
@       IN      SOA     dns1.jges.edu.tw. root.jges.edu.tw. 
                                    (                        
                                      2010072901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
         IN      NS      dns1.jges.edu.tw.
1       IN      PTR     dns1.jges.edu.tw.         ;這裡有個"1"  也有個PTR ,都是這個反解檔必備的,自己想想為什麼要用1..(提示:反推回來,想想之前那該死的點)
*還有,如果沒有開起來的機器請不要亂弄正反解....會抓不到...冏
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
呃,上面的說明太長了,簡單來說,正解寫出來會變成底下這樣:
vi /var/named/chroot/var/named/jges.fwd
$TTL    86400
$ORIGIN jges.edu.tw.
@ IN SOA dns1 root ( 2010072901 28800 14400 720000 86400 )
; 本領域的 DNS 伺服器的主機名稱與 IP 的對應
@          IN   NS     dns1
@          IN   NS     dns2
dns1      IN   A      163.19.1.1
dns2      IN   A      163.19.1.2         
www        IN    A    163.19.1.3
www        IN    A    163.19.1.4
$ORIGIN dep1.jges.edu.tw.
                IN NS dns1
                IN NS dns2
dns1         IN A 163.19.1.50
dns2         IN A 163.19.1.51
www2 3600 IN A 163.19.1.1
ftp 3600 IN CNAME www2
           IN    MX    10    mail
           IN    MX    20    imap
mail     IN    A    163.19.1.30
imap    IN    A    163.19.1.31
$ORIGIN dep1.jges.edu.tw.
                IN NS dns1
                IN NS dns2
dns1         IN A 163.19.1.50
dns2         IN A 163.19.1.51
  
 換句話說,只有一台主機自己身兼dns、www、mail、ftp等功能,實際可以這樣寫:
vi /var/named/chroot/var/named/jges.fwd
$TTL    86400
$ORIGIN jges.edu.tw.
@ IN SOA dns root ( 2010072901 28800 14400 720000 86400 )
           IN NS    dns
dns      IN A 163.19.1.1
www     IN CNAME    dns
mail      IN CNAME    dns
ftp        IN CNAME    dns    
------------底下是樣品的例子,加不加就看情況啦------- 
sun        IN   A      192.168.1.200
sun        IN   TXT    "The sun solaris OS"
sun        IN   HINFO  "Celeron 1G""Solaris 10"
 
----------------------------------------------------------------------------------------------------------------
特別加映!
關於SOA
Start of Authority。
這個標誌代表著 master/slave 相關的認證、授權資料。 不論你的 DNS 系統有沒有設定 master/slave 的架構,都需要含有這個設定才好。 SOA 後面共帶有三個參數,所以該行為:
 
      [zone] IN SOA [主機名] [管理員 email] ([五組更新時間參數])
 
每個設定項目可以這樣看:
 
    * 主機名:就是 master DNS 的主機名稱,通常填寫本身主機名即可。還是要注意那個小數點的存在與否喔!非常重要!
    * 管理員 email:本來應該是 "root@localhost." 的,不過因為 @ 已經被作為特殊代號 (zone), 所以就用小數點來取代,因此 email 就成為 "root.localhost." 囉!
    * (五組數字):這五個數字分別代表 serial, refresh, retry, expire, ttl。
 
至於那五個數字的意義是這樣的:
 
   1. Serial :是一個序號,但這個序號可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序號為 100 但 slave 序號為 90 時,那麼這個 zone file 的資料就會被傳送到 slave 來更新了。 由於這個序號代表新舊資料,通常建議可以利用日期來設定!
   2. Refresh :除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 命令 slave 多久進行一次主動更新;
   3. Retry :如果到了 Refresh 的時間,但是 slave 卻無法連接到 master 時, 那麼在多久之後,slave 會再次的主動嘗試與主機連線;
   4. Expire :如果 slave 一直無法與 master 連接上,那麼經過多久的時間之後, 則命令 slave 不要再連接 master 了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理員處理完畢後, 再重新來到 slave DNS 重新啟動 bind 吧!
   5. Minimun :這個就像是 TTL 啦!
 
另外,這幾個數字的大小是有限制的!要瞭解:
 
    * Serial <= 2^32 = 4294967296
    * Refresh >= Retry * 2
    * Refresh + Retry < Expire
    * Expire >= Retry * 10
    * Expire >= 7Days
-------------------------------------------------------------------------------------------------------------------------------
其他符號一覽表:
 
 NSname server 的縮寫,這個標誌的參數是:
      [zone] IN NS [主機名稱]
注意, NS 後面接的一定是主機名稱!代表的意思是說:『這個 zone 的查詢請向後面這部主機要求』的意思。 所以,如果這個 zone 有兩部以上的 DNS 伺服器負責時,那就需要寫兩個 NS 了!而 NS 後面接的主機名稱要有 IP 的對應啊!因此就需要 A 這個標誌了!
 Aaddress,參數是:
      [hostname] IN A [IP]
意思是說該部主機的 IP 對應之意!也是最常用的一個標誌!
 MXmail exchanger的簡寫,參數是:
      [hostname] IN MX [順序] [主機名稱]
注意,這個 MX 與 mail server 有關,沒有 mail server 的朋友可以省略這個標誌,但是如果你的領域內有 mail server 時,就必需要設定這個 MX 才好。MX 的用途是在於『郵件轉遞』或者是經由上層郵件主機備份的一個機制, 後面設定的那個主機名稱通常是你的上游郵件主機, 設定區域中擔任郵件伺服器的主機,所有要送往那部機器的 mail 都要經過 mail exchanger 轉送。而數字則是該主機郵件傳遞時的優先次序,此值越低表示有越高的郵件處理優先權。
如果不知道如何設定,通常建議直接設定成 mail server 主機名稱即可
 CNAMEcanonical name,別名. 顧名思義,這個標誌在建立『主機別名』的啦!參數為:
      [hostname] IN CNAME [主機名稱]
注意一下, CNAME 後面接的是主機名稱。因為有好幾部主機名稱都對應到同一個 IP 上頭, 你當然可以針對每個主機名稱給予一個 A ,不過如果未來要改 IP 時,你就得改好幾個啦! 此時改為 CNAME 來處理就很簡單。
 PTR pointer,定義某個 IP 對應的 domain name,即將 IP 位址轉換成主機的FQDN。
 TXT 這個東西在進行『說明』而已!亦即是前面那部主機的一些資訊。 特別注意的是,沒事的話,『資訊不要寫得太詳細,有的時候甚至應該要寫些錯誤的訊息!』 為什麼呢?cracker沒事做嗎?呃,不過這東西有另一個信件上的安全應用,請看底下DNS其他應用,SPF的說明。
 AAAA 不要懷疑!用法和上面的A相同,不過是傳說中的 IPv6 啊啊阿啊啊!
------------------------------------------------------------------------------------------------------------------------------------------
寫在最後面,一般單位到這裡就做完正解了,反解就丟給上層單位那些領更多錢或更厲害的人去做吧!(攤手)
呃,當然,如果很不幸的網管人員,還是有空弄一下反解比較好囉~
 
啟動DNS很簡單,輸入
/etc/init.d/named start  (或restart)
但是這個啟動可不見得是成功的!因為dns的上層更新速度和設定的TTL有極大關係,所以可能真要等半天一天的才能看到實際的後果!還有,我們除了用nslookup和dig指令可以檢測外,鳥哥說:『務必』要去 /var/log/messages 觀察過才行!

dig 網址 any       <===追蹤,找出與該網址查詢結果有關的dns紀錄都丟出來
dig +trace 網址   <===追蹤,找出與該dns查詢經過的路徑
dig @網址 網址   <===指定在第二個網址上查詢第一個網址的dns紀錄
traceroute 網址   <===追蹤,找出經過路徑,並顯示正反解(只寫出IP卻沒名字就是沒設反解啦~)

呃,還有一個很棒的套件叫做「dnstop」,長得很像內建用來觀察系統流量的「top」,可以用來做出多種不同的觀測喔!要裝!網址:http://dns.measurement-factory.com/tools/

--------------------------DNS其他的應用,SPF(需要重新編譯),請參考http://phorum.study-area.org/viewtopic.php?t=18000------------
SPF(Sender Policy Framework):
主要使用dns的TXT記錄說明此網域的發信來源有哪些
詳情請查閱RFC 4408

2010年10月13日 星期三

2010年10月12日 星期二

Ubuntu的unzip出現windows中文檔案的亂碼?!網路上的最佳解法-重新編譯

經過google之後,大多數人採用的第一種應急措施就是不使用Ubuntu內帶的Unzip程式,改用如7-Zip、PeaZip等其他壓縮程式來解決這問題(最快又穩當的方法就是使用wine然後外掛winzip或winrar囉!),總之,能解決該死的Big5問題就是好方法,所以也請大家多多愛用Unicode來存檔案 :)

個人最常用的解法是第一個,其他的作法就請自行參考:
-----------------------------------------作法一-------------------------------------
以下文章來源:http://louis3c.blogspot.com/2009/08/ubuntu-big5-convert-to-utf-8.html

在Ubuntu下要將內文為Big5轉換為UTF-8可以使用iconv

1.開啟終端機(Terminal)

2.輸入下列命列
iconv -f big5 -t utf8 src_filename -o output_filename

src_filename:big5編碼檔案
output_filename:utf8編碼檔案
------------------------------------------作法二--------------------------------------
以下文章來源: http://blog.yam.com/kenshinn/article/3161348

原因發生是在windows下winzip對zip檔的type設定錯誤,
linux下暫時先用leeym 大大的 patch來解決
以下是以ubuntu為例:

1.取得unzip的source
#apt-get source unzip
接著會產生 unzip-版本的目錄(筆者測試時為unzip-5.52)

2.修改unzpriv.h
找到_OEM_INTERN
將此區段中,
*p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);}
改為
*p = native(*p);}

3.重新編譯unzip
#make -f unix/Makefile generic
產生的unzip檔案,再換掉原來的/usr/bin/unzip
如此unzip才能正確解出屬於該檔案編碼的檔案

即使做了上述修改
unzip在utf8下解出來的依然是亂碼
但修正過後的亂碼已經可以用convmv來處理了


----------------------------------------作法三-----------------------------------------
以下文章來源:http://plog.longwin.com.tw/news-unix/2008/07/15/convmv_utf8_big5_convert_linux_2008


Linux: 轉換 檔案名稱 的編碼 convmv (UTF-8/Big5 互轉)



當整個目錄裡面都是 Big5 的檔案, 然後要全部轉成 UTF-8 的時候, 想到就很累, 這就是當初要把 Terminal 都轉換成 UTF-8 其中一個障礙.



不過那時候找到一隻 script, 程式寫法大概就是 echo 現在的檔名, 然後用 iconv 轉成 UTF-8, 再 mv 把檔名換掉.



程式如下: (已不知來源為何, 若有人知道, 還請告知此程式來源, 將立即補上)



#!/bin/sh

# this script changes big5 chinese file/directory name to utf8 file/directory name.

# It will recursive.

# it can handle the file name containing space.

# when you use this script, please change to the directory that you want to transfer files' name.

# then execute like "~/ic2"

# i hope this script will not impact anything that will crash your system.

# this script works fine for me.



DIR="."



for I in * ; do

    echo "check... $I"

    f=`echo "$I" | iconv -f big5 -t utf8`

    if [ $? = 0 ]; then

        if  [ "$I" != "$f" ];then

            echo "$f"

#            cp -rv "$I" ~/cbackup/

            mv -v "$I" "$f"

            if [ $? = 0 ];then

                rm -rfv ~/cbackup/"$I"

            else

                echo "$f"

                exit 1;

            fi

        else

            echo "skip $I"

        fi

    else

        echo "skip $I"

    fi

done

echo "ok!"



#following from cynosure

for J in * ; do

    if [ -d "$J" ]

    then

        path=`pwd`

        echo "dir ""$J" #where am i

        cd  "$path""/""$J"

        ~/bin/ic2

        cd "$path"

    fi

done

ls *

exit 1;


此 script 我有做過一些修改, 會直接執行, 不會進行備份或測試的動作, 所以建議不熟先不要亂玩.. :P



我有另外將此 script 再 cp, 主要是來做還原等等的 script, 主要都是 copy 後修改 iconv, 來做事後處理, 例如:



  • iconv -f big5 -t utf8

  • iconv -f utf8 -t big5

  • iconv -f gb2312 -t utf8

  • iconv -f utf8 -t gb2312



不過現在有另外一隻更方便的程式囉~ 就是下述:




這隻主要是隻 Perl script, 該做 轉換/備份/測試/偵測環境 等等, 都寫的蠻完整的.



convmv 轉換編碼指令



  • convmv -f big5 -t utf-8 -r --notest *

  • -f big5: 從 Big5 編碼轉換 (不過標準應該是要寫 big5-eten, 但是我測試 big5 也可以動. :P)

  • -t utf-8: 轉換編碼到 UTF-8

  • -r: 遞迴的將目錄下的所有檔名都做轉換

  • --notest: 如果不下這個, 一切動作都只是測試, 會直接將轉換前和轉換後的檔名列給你看, 這加下去, 才會實際轉換檔名.

  • *: 所有檔案



其他參數



  • --list : 列出所有可用的編碼

  • --unescape : 轉換檔名中 %xx 這種 16 進位的編碼 (mv "./a%20x.jpg" "./a x.jpg")

  • --lower : 將所有檔名都轉小寫(ex: convmv --lower LOWER.txt)

  • --upper : 將所有檔名都轉大寫

  • -i : 互動模式, 轉換前會先經過 y/n 確認

  • 更多詳細可 man convmv 或 convmv --help, 除此之外, 可以另外再搭配 rename 做些其他應用~ :)