PHPについての質問です。変数に格納されている値をチェックしたいのですがやり方がわかりません。

ご存知でしたら教えていただきたいと思います。

具体的には下記の場合です。
変数$infoに「http://」が含まれているかどうかをチェックしたいのです。

自作したゲストブックなのですが「http://」が含まれていたらAタグを付加してデータベースへ保存したいと考えています。
他に良い方法があれば教えていただけたらと思います。

回答の条件
  • 1人5回まで
  • 登録:2006/11/16 18:17:08
  • 終了:2006/11/17 10:46:46

ベストアンサー

id:kn1967 No.4

kn1967回答回数2915ベストアンサー獲得回数3012006/11/16 19:15:14

ポイント100pt

$info = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $info);

この一行でURLの部分をリンクに置換する事が可能です。(<>は半角に直してね)

種を明かせば実はこの方法はPHPのマニュアルに載ってるものの丸写し(http://manual.xwd.jp/function.ereg-replace.html)なんですけど、関数が多すぎて探すのも大変ですから、できればPHPの関数一覧が見やすい本を1~2冊手元に置いておくことをお勧めします。

セキュリティの面では、上記で行き成り置換するのではなく、本当に存在するアドレスかどうかを確認してから置換してデータベースに書き込むといったような1手間が必要になります。

質問文とは外れますのでヒントだけ書いておきますね。

preg_match("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",$info,$m,PREG_OFFSET_CAPTURE)でアドレス部分を配列変数(ここでは$mとしてます)に読み出して、すべてのアドレスに対してfopenなどで開けるかどうかを確認する。

id:moks

回答ありがとうございました。私のやりたかった事が教えて頂いたereg_placeの1行で出来ました。

非常に助かりました。

2006/11/17 10:43:15

その他の回答(5件)

id:pinkymonk No.1

pinkymonk回答回数172ベストアンサー獲得回数142006/11/16 18:23:43

ポイント20pt

stristr 〔文字列検索〕

http://f32.aaa.livedoor.jp/~azusa/index.php?t=php&p=6#strist...

この関数でどうですか。

id:moks

回答ありがとうございます。試してみます。

2006/11/17 10:40:09
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912006/11/16 18:31:53

ポイント50pt

文字列の有無を確認する関数はstrstrstrpospreg_matchなどがありますが、たとえばstrpos を使った場合

if ( strpos( $info, 'http://' ) != FALSE ) {
    DB への登録処理
}

などとかけます。

id:moks

試してみます。ありがとうございました。

2006/11/17 10:40:07
id:hironobu-san No.3

hironobu-san回答回数1ベストアンサー獲得回数02006/11/16 18:39:30

ポイント50pt

こんな感じでしょうか

$retval = strpos($info, 'http://');

if($retval !== false) {

// 含む

} else {

// 含まれていない

}

id:moks

試してみます。ありがとうございました。

2006/11/17 10:40:04
id:kn1967 No.4

kn1967回答回数2915ベストアンサー獲得回数3012006/11/16 19:15:14ここでベストアンサー

ポイント100pt

$info = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $info);

この一行でURLの部分をリンクに置換する事が可能です。(<>は半角に直してね)

種を明かせば実はこの方法はPHPのマニュアルに載ってるものの丸写し(http://manual.xwd.jp/function.ereg-replace.html)なんですけど、関数が多すぎて探すのも大変ですから、できればPHPの関数一覧が見やすい本を1~2冊手元に置いておくことをお勧めします。

セキュリティの面では、上記で行き成り置換するのではなく、本当に存在するアドレスかどうかを確認してから置換してデータベースに書き込むといったような1手間が必要になります。

質問文とは外れますのでヒントだけ書いておきますね。

preg_match("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",$info,$m,PREG_OFFSET_CAPTURE)でアドレス部分を配列変数(ここでは$mとしてます)に読み出して、すべてのアドレスに対してfopenなどで開けるかどうかを確認する。

id:moks

回答ありがとうございました。私のやりたかった事が教えて頂いたereg_placeの1行で出来ました。

非常に助かりました。

2006/11/17 10:43:15
id:nakamuraaaaa No.6

nakamura回答回数7ベストアンサー獲得回数22006/11/16 21:47:26

ポイント50pt

preg_match(),ereg()のどちらかを使うと解決できます。

どちらも第1引数に検索したい文字列、第2引数に検索する変数を渡します。

検索したい文字列を含む場合はTRUE、含まない場合はFALSEを返します。

(例)

$info ="http://";

/* preg_matchを使う場合 */

if (preg_match("/http:\/\//",$info)) {

/* http://を含む */

} else {

/* http://を含まない */

}


/* eregを使う場合 */

if (ereg("http:\/\/",$info)) {

/* http://を含む */

} else {

/* http://を含まない */

}

?>

id:moks

試してみます。ありがとうございました。

2006/11/17 10:40:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません