PHP+AJAX 網域名稱查詢預備知識
本查詢系統利用 PHP 和 JQUery 的 Ajax 功能實現了對網域名稱資訊的查詢(這裡主要實現了網域名稱是否已經註冊的查詢)。系統主要用到了萬網提供的網域名稱查詢 API 介面,相關知識點羅列如下:
JQUery Ajax 的實現:這部分內容具體可以參見 JQuery API 文檔或本站即將推出的《JQUery 教程》。
file_get_contents 函數:把整個檔案讀入一個字串,這裡用於讀取一個網頁(萬網 API 返回結果頁面)。
simplexml_load_string 函數:用於解析一個 xml 文檔到對象中。
strrpos 函數:用於定位字串第一次出現的位置,這裡用來搜尋索引鍵。
網域名稱查詢系統需求分析
根據使用者輸入的網域名稱,查詢該網域名稱是否已經被註冊。
對網域名稱註冊資訊(whois)進行查詢,該功能本教程沒有實現,可以參考已有功能來實現。
頁面/檔案資訊
domain.html:表單提交及查詢結果資訊顯示頁面。
domain_check.php:處理查詢網域名稱資訊的 PHP 檔案。
萬網網域名稱查詢 API 介面
介面採用HTTP,POST,GET協議。
調用URL:http://panda.www.net.cn/cgi-bin/check.cgi
參數名稱:area_domain 值為標準網域名稱,例:5idev.com
調用舉例:http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=5idev.com
返回XML:
代碼如下 |
複製代碼 |
<?xml version="1.0" encoding="gb2312"?> <property> <returncode>200</returncode> <key>5idev.com</key> <original>211 : Domain name is not available</original> </property> |
XML 結果說明:
returncod:介面調用狀態。
key:表示當前 check 的網域名稱。
original:網域名稱 check 的結果。
original 有4個結果:
210 : Domain name is available:表示網域名稱可以註冊
211 : Domain name is not available:表示網域名稱已經被註冊
212 : Domain name is invalid:表示網域名稱參數傳輸錯誤
214 : Unknown error:表示未知錯誤或查詢異常
domain.html 頁面關鍵代碼
domain.html 頁面實現了表單 Ajax 提交及網域名稱查詢結果資訊顯示。完整的代碼如下(注意是utf-8編碼):
代碼如下 |
複製代碼 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1 -transitional.dtd"> <html> <head> <title>網域名稱註冊查詢</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="js/jquery-1.4.2.min.js"></script> <script type="text/javascript"> function domain_check() { var domain = $.trim($("#domain").val()); if( domain == ''){ $("#check_result").html('請輸入要查詢的網域名稱資訊,如:5idev.com'); $("#domain").focus(); return false; } $("#domain_result").html('<img src="images/loading.gif" /> 正在查詢,請稍後...'); $.ajax({ type:"get", cache:false, datatype: "text", url:"domain_check.php?domain="+domain, success:function(data){ $("#domain_result").html(data); } }); } </script> </head> <body> <h1>網域名稱註冊查詢</h1> <div> <form > 請輸入要查詢的網域名稱:www.<input id="domain" type="text" value="5idev.com" onfocus="this.value=''" /> <input type="button" value=" 查 詢 " onclick="domain_check()" /> </form> </div> <div id="domain_result"></div> </body> </html> |
這裡利用 JAuery 實現了 Ajax GET 方式的表單提交,並對輸入的表單進行了初步非空檢測。
網域名稱查詢 PHP 代碼
下面是完整的用於查詢網域名稱資訊和回應 Ajax 請求 PHP 原始碼:
代碼如下 |
複製代碼 |
<?php $domain = htmlspecialchars(trim($_GET['domain'])); if( !$domain ){ echo '請輸入要查詢的網域名稱,如:5idev.com'; exit; } // 調用萬網網域名稱查詢API $area_domain = iconv("utf-8", "gb2312",$domain); $domain_api = 'http://panda.www.net.cn/cgi-bin/check.cgi?area_domain='.$area_domain; $contents = file_get_contents($domain_api); $xml = simplexml_load_string($contents); if (!empty($xml)) { switch($xml->original) { case '210 : Domain name is available':$result = '該網域名稱可以註冊';break; case '211 : Domain name is not available':$result = '該網域名稱已經被註冊';break; case '212 : Domain name is invalid':$result = '網域名稱參數錯誤,請輸入的網域名稱格式';break; case '214 : Unknown error':$result='查詢異常,請稍後再試';break; } } else { // 備用,只能查詢國際網域名稱 $url = 'http://www.checkdomain.com/cgi-bin/checkdomain.pl?domain='.$_GET<'domain'>; $fp = file_get_contents($url); if( strpos($fp, ', has already been registered') ){ $result = '該網域名稱已經被註冊'; } else { $result = '該網域名稱可以註冊'; } } echo '<b>'.$domain.'</b>:'.$result; ?> |
需要注意的幾個問題
支援中文網域名稱查詢。
由於網域名稱要在頁面顯示,因此利用 htmlspecialchars 函數做了特殊 html 代碼轉換,以防止非法輸入,更嚴格的可以使用Regex做檢測。
由於萬網介面提供的是 gb2312 編碼,因此在這裡利用進行了 iconv() 函數進行了編碼轉換,如果不使用 utf-8 編碼則無需轉換。
如果使用 gb2312 編碼,在返回 Ajax 結果是可能需要將顯示結果進行 gb2312 到 utf-8 編碼的轉換。
當萬網介面無法返回結果時,啟用備用介面進行查詢,但只能查詢國際網域名稱。