【MENU】
【検索エンジンからアクセスしてきたとき検索語句を取得する(SEO対策技)】
◆概要
※特定の検察エンジン(yahoo/google)から複数の検索語句によってページにアクセスしてきたとき、その検索語句を取得する。
※検索語句に該当するテキトスの背景を変える等に応用すれば、アクセスしたひとが判りやすくなる。
※検索エンジンの$_SERVER['HTTP_REFERER']の構造がまだよく判らないので、本記事はあくまで参考に留めて下さい。
◆$_SERVER['HTTP_REFERER']の構造例(http:を全角文字で記述)
※yahooの場合
http://search.yahoo.co.jp/search?p=PHP MYSQL バインド&search_x...
※googleの場合
http://www.google.com/search?client=safari&rls=ja-jp&q=テキストフィールド 文字位置...
◆PHP tips
//URLエンコード・HTML特殊文字エスケープ・SJISエンコード
$HtPef=htmlspecialchars(urldecode($_SERVER['HTTP_REFERER']));
$HtPef=mb_convert_encoding($HttpPeferer,"SJIS",auto);
$SeoName="";
$SearchWord="";
if(strpos($HtPef,"yahoo")>=1){
$SeoName="yahoo";
//最初のp=以降を取得
$SWord3=strstr($HtPef,"p=");
//3文字目から最初の&の前まで)
$SWord2=substr($SWord3,2,strpos($SWord3,"&")-2);
}else if(strpos($HtPef,"google")>=1){
$SeoName="google";
//最初のq=以降を取得
$SWord3=strstr($HtPef,"q=");
//3文字目から最初の&の前まで)
$SWord2=substr($SWord3,2,strpos($SWord3,"&")-2);
}
//全角空白→半角空白に変換
$SWord2=str_replace(" "," ",$SWord2);
//前後の半角空白削除
$SWord2=trim(" ",$SWord2);
//配列変換
$SearchWord=explode(" ",$SWord2);
◆メモ(1)
※SJISエンコードはページをSJISで作成している場合に実行。
※全角空白→半角空白に変換する必要があるのはyahooの場合。
※trim()→配列変換前の文字列の前後に半角空白があるとあとの処理でエラーになることがある
※配列変換→語句の配列の区切り文字は「半角空白」としている。
◆メモ(2)
※【MyScript】のトップページに適用している。
※「文字列に含まれる特定の語句の背景色を変える」と組み合わせている。
(DataID:000092 Date:2008/05/29)
【指定語句がリスト(配列)にあるかどうかチェックする】
◆概要
※複数の語句を配列化し、その配列に含まれた語句が文字列に含まれているかどうか調べる。
◆PHP4 Tips
//語句(ワード)のリスト(配列--例:ファイルの拡張子)
$List=array(".",".gif",".png",".JPEG",".jpeg",".jpg",".JPG");
//$Word:検索される文字列
※例示(1)
function fnWordSerch($Word){
$ff=in_array($Word,$List);
if ($ff==false){
echo "※指定されていないファイルなので操作できません。";
exit;
}
}
※例示(2)
function fnWordSerch($Word){
if(!in_array($Word,$List)){
echo "※指定されていない。"; //実行するスクリプトを記述
}
}
※$Wordに検索語句が含まれていればtrueを返す
◆語句がひとつだけの場合は
$strR=strpos($Word,$strA);
//1文字目[0]、2文字目[1]...
//ない場合はfalseを返す
※指定文字($strA)には語句を指定可能(例:q=)
※この場合は指定語句の先頭文字の位置を返す
(DataID:000035 Date:2008/03/07)
【数値をまるめる---切り捨て・切り上げ・四捨五入】
◆PHP
//$valR:数値(入力)
//$valR2:数値(出力)
//小数点以下切り下げ
$val2=ceil($valR);
//小数点以下切り捨て
$val2=floor($valR);
//小数点以下四捨五入
$val2=round($valR);
//小数点以下切り上げ(整数型に)
$val2=int($valR);
(DataID:000044 Date:2008/03/15)
【数値を任意の桁のゼロ付文字に変換する】
◆概要
※アクセスカウンターなどで、取得したアクセス数(数値)を任意の桁のゼロ付数値(文字)に変換する
◆PHP
//$valCount:数値(例:123)
//$strCount:ゼロ付数値(例:000123---6桁の場合)
function fnChngStr(valCount){
//$valKeta=6; //指定桁数
$cc=$valCount+pow(10,$valKeta); //pow():10の($valKeta)桁乗
$strCount=substr($cc,1,$valKeta);
}
◆メモ
※指定桁より1桁多い数値にして、2桁目から最後まで切り出すとゼロ付数値(文字)になる。上記の例では
$valCount=123(数値)
$valKeta=6(桁)
$cc=123+10↑6(10の6乗)=123+1000000=1000123(7桁の数値)
$strCount=$cc(7桁の数値の2桁目から最後まで切り出す)=000123
となる。
※このテクニックは、他のスクリプト(javascript/vbscript)やVBA等でも応用できる。
(DataID:000043 Date:2008/03/15)
【相対パス(../../〜)から絶対パス(C:\〜〜)を取得する】
◆Tips
[PHP]
※現在のファイルのディレクトり名を取得する
$strFilePath=getcwd();
$strFilePath="D:\web_data\dblpar\homepage"
※相対パスから絶対パスを取得
$strFilePath2="../sample"; //相対パス
$strRealPath=realpath($strFilePath2); //絶対パス
$strRealPath="D:\web_data\dblpar\sample" となる
※存在しないフォルダ・ファイルを指定すると実行されない。
(DataID:000081 Date:2008/04/01)
【現在の年月日・時刻(日時)・曜日を取得する】
◆tips
[PHP]
※現在の年月日・時刻
date("Y/m/d H:i:s")---2008/01/01 00:00:00
※現在の年付日・曜日
date(("Y/m/d l")---2008/03/29 Saturday
※現在の年付日(ゼロ付)
date("Y")---年
date("m")---月(1桁月はゼロ付)
date("d")---日(1桁日はゼロ付)
date("H")---時(24時間制/1桁時はゼロ付)
date("i")---分(1桁分はゼロ付)
date("s")---秒(1桁秒はゼロ付)
date("w")---曜日(0〜6/0は日曜日)
date("l")---曜日(英語)
※現在の年月日・時刻のタイムスタンプ
time();
◆メモ
※年月日・時刻のフォーマットは沢山あるので参考書を参照のこと
(DataID:000067 Date:2008/03/29)
【現在の年月日から前月の年月を設定する】
◆概要
※任意の年月、または当月の年月から、前月と翌月の年月を設定する。
◆Tips
[PHP]
<?php
※任意の年月の場合(年は4桁・月はゼロ付文字)
$strDate="2008/03"; //スラッシュで年と月を結合している
$Month==substr($strDate,5,2);
$Year=substr($strDate,0,4);
※現在の年月の場合
$Month=date("m"); //今月(ゼロ付文字で取得)
$Year=date("Y"); //今年(4桁)
※前月の設定
//年月の計算は、年月を数値に変換してから実行
if($Month=="01"){
$Month2="12"; //今月が1月なら前月は12月
$Year2=intval($Year)-1; //前年は前年
}else{
$Month2=intval($Month)-1;
$Year2=$Year;
}
//9月以下の場合、ゼロ付文字に
if($Month2<=9){
$Month2="0".$Month2;
}
$strDate2=$Year2."/".$Month2; //前月
※翌月の設定
//年月の計算は、年月を数値に変換してから実行
if($Month=="12"){
$Month3="12"; //今月が12月なら翌月は1月
$Year3=intval($Year)+1; //前年は翌年
}else{
$Month3=intval($Month)+1;
$Year3=$Year;
}
//9月以下の場合、ゼロ付文字に
if($Month3<=9){
$Month3="0".$Month3;
}
$strDate3=$Year3."/".$Month3; //翌月
?>
◆メモ
※前々月、3ケ月前、2ケ月後等でも同様に設定することができる。
(DataID:000046 Date:2008/03/18)
【配列を操作する(PHP)】
◆概要
※PHPでは、多彩な配列操作関数がある。ここに記載した以外にもあるので、詳細はPHPマニュアル等を参照されたい。
◆tips
[PHP]
※配列を作成する(添字配列)---n*は数値または文字列(以下同じ)
$arrName=array(n0,n2,n3,...);
$arrName[0]---n0 //インデックスは0から
$arrName[1]---n1
$arrName[2]---n2
...
※配列変数を作成する(連想配列)---k*:キー,m*:値
$arrName=array(n0,n2,n3,...);
$arrName[k0]---n0
$arrName[k1]---n1
$arrName[k2]---n2
...
※任意のインデックスに要素を格納する
$arrName=new Array(2=>n2,n3,n4,...);
$arrName[2]---n2 //インデックスは0から
$arrName[3]---n3
$arrName[4]---n4
...
$arrName=new Array(n0,n1,8=>n8,...);
$arrName[0]---n0 //インデックスは0から
$arrName[1]---n1
$arrName[8]---n8
...
※配列の末尾に要素を追加する
$arrName=array(n0,n2,n3);
$arrName=array_push($arrName,n4,n5,...); //要素を追加
※配列かどうか調べる
$strR=is_array($arrName);
配列のときtrue、異なるときはfalseを返す
※配列の要素数をカウント
$arrName=new Array(n0,n1,n2,n3,n4);
$strR=count($arrName);
配列が空のとき0、配列でない場合は1を返す(要素数1のとき注意)
※配列の要素を検索する---$searchW:検索語、check:型チェック(省略可)
$strR=in_array($searchW,$arrName,[check]);
検索語と等しい要素があったときtrue、ないときはfalseを返す
checkにtrueを指定した場合は型チェック(数値・文字等)を行う
$strR=array_search($searchW,$arrName,[check]);
検索語と等しい要素があったとき要素に対応するキー、
ないときはfalseを返す
checkにtrueを指定した場合は型チェック(数値・文字等)を行う
※配列同士を連結する
$arrName1=new Array(n0,n1);
$arrName2=new Array(m0,m2,m3);
$arrNew=array_merge($arrName1,$arrName2,...);
//インデックスは保持されない
//同一キーがあった場合は上書きされるので注意
※配列の要素の順序を逆転する
$arrName=new Array(n0,n1,n2,n3,n4);
$arrNew=array_reverse($arrName); //要素順を逆転
※配列内容をソート(分類)する
$arrNew=ksort($arrName,[フラグ]); //ソート(キー昇順)
$arrNew=krsort($arrName,[フラグ]); //ソート(キー降順)
$arrNew=sort($arrName,[フラグ]); //ソート(キー昇順)
$arrNew=rsort($arrName,[フラグ]); //ソート(キー降順)
フラグ:省略可
SORT_REGULAR:標準的ソート
SORT_NUMERIC:数値としてソート
SORT_STRING :文字としてソート
(DataID:000071 Date:2008/03/31)
【配列を操作する(2)---文字列変換(PHP)】
◆概要
※PHPでは、多彩な配列操作関数がある。ここに記載した以外にもあるので、詳細はPHPマニュアル等を参照されたい。
◆tips
[PHP]
※配列を連結して文字列にする
$arrName=new Array(n0,n1,n2,n3,n4);
$strR=join(連結文字,$arrName); //文字列に変換
$strR=implode(連結文字,$arrName); //文字列に変換
連結文字---配列の要素は連結文字で連結される
※文字列を分割して配列にする
$strR="n0,n1,n2,n3,n4";
$arrNew=explode(分解文字,$strR,[要素数]); //文字列を配列に変換
$arrNew=split(分解文字,$strR,[要素数]); //文字列を配列に変換
分解文字:この文字で要素分割する(上記の例では",")
要素数:(省略可)指定した要素数のみ配列にする
残りは最後の要素に一括して格納
(DataID:000072 Date:2008/03/31)
【文字例にURL(http://〜〜)があったら自動的にリンクタグに変換する】
◆PHP4 Tips
//$strR:文字列(入力) $strR2:文字列(出力)
function autoLinker($strR){
$strR = ereg_replace("(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>" ,$strR);
return $strR2;
}
◆実行結果:
[PHP]
$strR="あいうえお[URL]かきくけこ";
echo $strResult=autoLinker($strR);
を実行すると、結果が書き込まれる。
[HTML]
あいうえお<a href="[URL]" target="_blank">[URL]</a>かきくけこ
と記述される。タグが実行されれば、[URL]のみリンク文字として表示される。ちなみに下記に当サイトのトップページのURLを記述しておく。
◆当サイトのURL(↓は文章中にURL名のみ記述)
http://www.dblpar.com/
※URLの最後に半角空白が入ると正常にリンクしないので注意。
(※この記事では\マークとシングルコーテーションは全角文字に変換されてデータベースに登録される。表示するとき半角文字変換されていない場合は全角文字のまま表示される。)
(DataID:000004 Date:2008/02/28)
【文字列からキーを抽出しデータベース(MySQL)のレコードをセレクトする】
◆概要
※カンマ区切りで接続された複数のデータをキーとしてデータベース(MySQL)からレコードをセレクトする。
◆MySQL+PHP(本文)
※テーブル名:tblMySample
※フィールド:FILD1,FILD2,FILD3,...
※文字列
◆Tips
[PHP]
<?php
$Data="001,002,005,..."
$arrData=explode(",",$Data); //文字列を配列変換
$QesCnt=count($arrQesNumber); //要素数
for($n=0;$n<$QesCnt;$n++){
if($n==0){
$sqlWhere=" WHERE DataID='".$arrQesNumber[$n]."' ";
}else{
$sqlWhere.=" OR DataID='".$arrQesNumber[$n]."' ";
}
$con=mysql_connect(MYSQL_CONNECT_HOST,MYSQL_CONNECT_USER,MYSQL_CONNECT_PASS);
mysql_select_db(MYSQL_DB_NAME);
$sql="SELECT * FROM tblMySample ".$sqlWhere;
$res=mysql_query($sql);
...
mysql_close($con); //SQLクローズ
?>
◆MySQL(config.php)---省略
◆メモ
※「データベース(MySQL)からランダムに複数個のレコードデータをセレクトする」で作成したデータの文字列を元に、同じテーブルから改めてレコードを抽出するとき等
(DataID:000089 Date:2008/04/21)
【文字列から指定範囲の文字列を切り出す】
◆概要
※文字列から指定した範囲の文字列を切り出す、他、類似の手法を紹介。
◆javascript tips
//$strR:文字列
//$start:切り出す始点、end:終点(0から始まる---n番目-1)
//$n:n番目の文字(0から始まる)
//$m:切り出す文字数
//文字列から指定した範囲の文字列を切り出す
function fnGetStr1($strR){
$strR2=substr($strR,$n,$m);
return $strR2; //returnは以下省略
}
//文字列の左側(先頭)から指定した文字数を切り出す
function fnGetStr2($strR){
$strR2=substr($strR,0,$n);
}
//文字列順を逆転する
function fnGetStr3($strR){
$strR2=strrev($strR);
}
//文字列から指定した文字が最初に出現した以降の文字列を取得する
function fnGetStr4($strR){
//$strA:検索文字
$strR2=strstr($strR,$strA);
//または $strR2=strchr($strR,$strA);
}
//文字列から指定した文字が最初に出現した場所を取得する
function fnGetStr42($strR){
//$strA:検索文字
$strR2=strpos($strR,$strA);
//1文字目[0]、2文字目[1]...
//ない場合はfalseを返す
}
※指定文字($strA)には語句を指定可能(例:q=)---この場合は指定語句の先頭文字の位置を返す。---指定した文字が文字列に存在するかどうか調べることができる。
※使用方法(文字「◆」がない場合は...)---イコールを3つ使用
if(strpos($strR,"◆")===false){
...
}
//文字列から指定した文字が最後に出現した以降の文字列を取得する
function fnGetStr5($strR){
//$srtA:検索文字
$strR2=strrchr($strR,$srtA);
}
※指定文字($srtA)は語句を指定可能(例:q=)---この場合は指定語句を含んでそれ以降の文字列を取得する。
※全角文字では何故かうまく切り出せないよう
//文字列の長さを取得する
function fnGetStr6($strR){
//$srtL:長さ
$strL=strlen($strR);
}
//文字列を検索して別の置換語に置き換える(該当部分をすべて置換)
function fnGetStr7($strR){
//$strS1:検索語
//$strS2:置換語(検索語と同一の長さの必要なし)
$strR2=str_replace($strS1,$strS2,$strR,);
}
◆メモ
※javascript等、他のスクリプトと混同して、なかなか覚えられないので...
(DataID:000040 Date:2008/03/14)
【文字列に含まれる特定の語句の背景色を変える】
◆概要
※特定の語句はあらかじめ配列化しておき、文字列にその配列の語句があれば背景色を変える。
◆PHP tips
//$strR:文字列
$arrWord=array("aaa","bbb","ccc");
for($i=0;$i<sizeof($arrWord);$i++){
$strR=ereg_replace(preg_quote($arrWord[$i]),"<span style='background-color:#ffd7d7;'>"."\\0"."</span>",$strR);
}
echo $strR;
※sizeof(配列):配列の要素数を求めるcount()のエイリアス(別名)
※preg_quote(文字列):正規表現文字をエスケープする
正規表現文字:\+'{}$()=!<>|他(大文字で記述)
例示は文字列=配列[i]
◆メモ
※配列に含まれる語句をすべて同じ背景色にする。
※「検索エンジンからアクセスしてきたとき検索語句を取得する」と組み合わせたりすると効果的。
◆注意!!!
※文字列がHTMLのタグを含み、指定語句がそのタグ内に使用されているとき、HTMLが正常に機能しない可能性も大なので注意すること。
※実際には下記のように語句リスト($List)に含まれる語句が指定された場合は背景色付加を実行しないようにしている。
for($i=0;$i<sizeof($arrWord);$i++){
$Word=preg_quote($arrWord[$i]);
$List=array("javascript","a","/a","href","a href","li","/li","onmouseover"," onmouseout","this");
if(!in_array($Word,$List)){
$strR=ereg_replace($Word,"<span style='background-color:#ffd7d7;'>"."\\0"."</span>",$strR);
}
echo $strR;
(DataID:000091 Date:2008/05/28)
【変数の型を調べる(PHP)】
◆概要
※if文などでよく用います。例えば
if(is_null($strR){
...
}
など。
◆tips
[PHP]
$strR2:戻り値(論理値)
$strR:入力値
$strR2=is_*($strR)
※該当するときはTRUE、異なる場合はFALSEを返す。
[型]
$strR2=is_bool($strR):論理値型
$strR2=is_integer($strR):整数型
$strR2=is_int($strR):整数型
$strR2=is_float($strR):浮動小数点型
$strR2=is_string($strR):文字列型
$strR2=is_array($strR):配列
$strR2=is_object($strR):オブジェクト
$strR2=is_null($strR):NULL
※この他にもあり。
(DataID:000060 Date:2008/03/21)
【変数の型を変更する】
◆tips
[PHP]
$strR2:出力値
$strR:入力値
$strR2=settype($strR,型)
[型]
bool:論理値型
boolean:論理値型
integer:整数型
int:整数型
float:浮動小数点型
string:文字列型
array:配列
object:オブジェクト
null:NULL
※この他にもあり。
(DataID:000059 Date:2008/03/21)
【変数の型を変更する】
◆概要
※スクリプトの特性のひとつとして、変数の型が曖昧、ということがあるが、計算等で型を特定しておく必要があることも多い。
◆tips
[PHP]
$strR2:出力値
$strR:入力値
$strR2=floatval($strR); //浮動小数点数(0-9以外から始まる場合は0)
$strR2=doubleval($strR); //浮動小数点数(0-9以外から始まる場合は0)
$strR2=intval($strR); //整数
$strR2=strval($strR); //文字列
※いずれも指定できるのはスカラー変数(論理値・整数・浮動小数点数・文字列型の変数)のみ。
(DataID:000066 Date:2008/03/28)