Lab.

【備忘録】【PHP】文字列の一部を取得 mb_substr()

データベースに登録されているURLを表示させるという、すごく単純な作業が発生したのだが、DB上のURLにhttp://があったり、なかったりというカタチで登録されていて、そのままリンクをはると誤作動が起きる可能性がある。

ってことで、本当は正規表現でやろうとおもったのですが、めんどくさすぎたので、最初の文字を取得して、http://あるばあいはそのまま。ない場合は、http://を追加して表示ということをしました。

この際、大文字と小文字で記載されてことも考えて対処してみました。

まず、最初のなん文字かを文字列から抜き出します。
使うのはこんなの。

mb_substr('対処になる文字列','取得開始位置(0なら先頭)','取得する文字数');


最初の5文字を取得してみる

$URL = "http://www.coipo.net/"; //http:ありのURL
$URL2 = "www.coipo.net/"; //http:なしのURL

$SUB = mb_substr($URL,0,5);
$SUB2 = mb_substr($URL2,0,5);

echo $SUB;
echo $SUB2;


大文字小文字を区別しないで比較する

大文字でかかれてたり、小文字で書かれてたりするので、無視して比較したいです。なので、下記をつかいます。

strcasecmp('文字列1','文字列2');
//比較して同じなら、0を返してくれます。


http:、https:があるか調べる。

$HTTP = "http:";
strcasecmp($SUB,$HTTP);
strcasecmp($SUB2,$HTTP);

$HTTPS = "https";
strcasecmp($SUB,$HTTPS);
strcasecmp($SUB2,$HTTPS);


http:、https:がない場合は、http://を追加する(まとめて書く)

$URL = "http://www.coipo.net/";
$SUB = mb_substr($URL,0,5);
$HTTP = "http:";
$HTTPS = "https:";

if(strcasecmp($SUB,$HTTP)==0 or strcasecmp($SUB,$HTTPS)==0){
echo $URL;
}else{
echo "http://" . $URL;
}

今回はデーターベースに登録されているURLの形がある程度コントロール下にあるので、このような書き方でいいと思うが、たとえば、http:///など/が3つある場合(間違いで入力されている場合)などが予測される場合は、まったく違った書き方になるとおもいますよね~。注意が必要です。


related article