大学教育用の電子メール アドレスのみが設定された電子メール検証を含む登録フォームがあるとします。
そこからPHPを使用して大学名を取得し、データベースに挿入する最良の方法は何でしょうか?
私が考えることができる唯一の方法は、 if college.edu address, then name = college を使用することです。しかし、何千もの大学があり、効率的ではないようです。
メールの値を含む文字列を取得し、「@」で分割してから「.」で分割します。結果の配列の 3 番目のオブジェクトが edu と等しい場合、配列の 2 番目のオブジェクトをデータベースに追加します。
それはあなたのために働くでしょうか、それとも私はあなたの質問を誤解していますか?
私は.edu
トップ レベル ドメインに詳しくありませんが、登録者は自分の whois レコードに有効な情報を提供する必要があると思います。そのため、通常の whois 検索が出発点になる可能性があります。たとえば、http://whois.domaintools.com/stanford.eduでは次のように表示されます。
Domain Name: STANFORD.EDU
Registrant:
Stanford University
The Board of Trustees of the Leland Stanford Junior University
241 Panama Street, Pine Hall, Room 115
Stanford, CA 94305-4122
UNITED STATES
もちろん、問題は自動クエリを受け入れる検索プロバイダーを見つけることです。
この機能を試してください:
function getDomainParts($email) {
$posDom = strrpos($email, "@");
$posTLD = strrpos($email, ".");
return array(
"tld" => substr($email, $posTLD+1),
"domain" => substr($email, $posDom+1, $posTLD-$posDom-1)
);
}
$tests = array(
"test1@college.edu",
"test2@bobstruckingacademy.edu",
"test3@test.com"
);
foreach($tests as $k => $v) {
$temp = getDomainParts($v);
if($temp['tld'] == "edu")
echo("College: " . $temp['domain'] . "<br>");
else
echo("Not Edu Address: " . $v . " (" . $temp['tld'] . ")<br>");
}
出力:
大学: 大学
大学: bobstruckingacademy
非教育アドレス: test3@test.com (com)
これはおそらくあなたが求めているものを正確に得られないことを理解しています. (例として) MSU を入力すると、それはミズーリ州を意味しますか? ミシシッピ州?ミシガン州?ある種のルックアップ配列またはテーブルがなければ、'msu' は登録フォームと同じくらい優れています。
または、すべての大学を含むドロップダウンを提供し、ユーザーに 1 つを選択させることもできますが、それでもすべての大学名を入力する必要があります。
編集
このリンクが役立つ場合があります: edu ドメインのリスト