• ベストアンサー

文字列から、ある文字をマッチさせるには

こんにちは。いつもお世話になります。 PHPで下記のような文を、CGI (peal)では、どうしたらいいでしょうか。 map=asakusa.php の「asakusa」の部分だけをマッチさせる方法です。 $url = "http://xxx.jp/shop/index.php?map=asakusa.php" $map= explode("?", $url); if($map[0] == "asakusa"){ $map_name = "浅草マップ"; } よろしくお願いします。

  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

こんな感じでどうでしょ $url = "http://****/****/****?map=asakusa.php"; @map = grep (($_) = /^map=(.*)\.php$/, split(/[\?&]/, $url)); # map=xxxxx.phpの xxxxxの部分をすべて取り出して mapという配列に返す if($map[0] eq "asakusa"){ # 文字列の比較は == の代わりに eq $map_name = "浅草マップ"; }

waterclock
質問者

お礼

早速のレス、ありがとうございます。 上手く行きそうですね。 つ~か、今また違う事で悩んでますーー;) こちらをちょっと教えて下さい。 +---------------------------------------------------- if($url =~ /=eyelens_top/){ $a = "HOYA"; }と if($url =~ /eyelens/){ $a = "HOYA"; }を合体させる方法です。 PHP風では、 if(($url =~ /=eyelens_top/) || ($url =~ /=eyelens_top/)){ $a = "HOYA"; } みたいになるんですが、CGIでは、 例えば、 if($url =~ /eyelens/ || /=eyelens_top/){ $a = "HOYA"; } これは正しいでしょうか。 教えて下さい。 PS. perlって、みんなが言う程簡単じゃないですね。 なんでこんなにむずかしのかーー;)

その他の回答 (1)

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.2

#1です >PHP風では、 >if(($url =~ /=eyelens_top/) || ($url =~ /=eyelens_top/)){ $a = "HOYA"; } perlでも、上記のとおりでよいですよ~

waterclock
質問者

お礼

どうもありがとうございます。 if(($url =~ /eyelens/) || ($url =~ /=eyelens_top/)){ $a = "HOYA"; } #ちょっと訂正 if(($url =~ /eyelens|=eyelens_top/){ $a = "HOYA"; } これで、良いんですね。 えっ!じゃ、PHPもこれで良いのでしょうか? 早速、検証してみます。 +-------------------------- 何をやっていたのかというと、某有名アクセス解析CGIを 改造していました。ページ構成を全部PHPで制作したため、 Title(<title>.....</title>)の部分が全部、<title>" . $title . "</title> でアクセス解析側に反映されるので、それをCGI側で、 置き換え作業をしていました。 問題は取りあえず解決しました。 やはり、perlの基礎から勉強した方が良いと感じました。 それから、PHPを習得した方が、無難ですね。 ご親切にありがとうございました。

関連するQ&A

  • CGI(Peal)でURLデコード

    このURLを参考に、フォームの確認ページをつくっているのですが、URLがデコードできません。 何度やってもエラーばかりで…Pealって難しいですね(PHPのほうが簡単)。 どうすればいいですか? http://www.aimix.jp/cgi/syohofrmgetvw.html

    • ベストアンサー
    • CGI
  • PHPでの文字列の扱い

    以下のPHPを書きましたが if文の$aに期待する値が入りません。この場合はどのようにすればよいのでしょうか? $a = "\$item[2] == \"1\" || \$item[2] == \"4\""; $Data = file("data.csv"); for($i = 0; $i < sizeof($Data); $i++){ $item = explode(",", $Data[$i]); if($a){ include('list.php'); } }

    • 締切済み
    • PHP
  • 文字列(×と÷)の文字化けについて

    phpを勉強している初心者です。 2つのテキストボックスを作って、 各数値を「架ける」または「割る」計算処理ができるように記述しています。 index.phpのフォーム部分は下記のようになっています。 <form method="post" action="test.php"> 入力欄1:<input type="text" name="number1"><br> <input type="radio" name="kigou" value="×">× <input type="radio" name="kigou" value="÷">÷<br> 入力欄2:<input type="text" name="number2"><br> <input type="submit" value="計算"> </form> test.phpの処理部分は下記のようになっています。 <?php if($_POST["kigou"] == "×" ){ $answer=$_POST["number1"]*$_POST["number2"]; }elseif($_POST["kigou"] == "÷" ){ $answer=$_POST["number1"]/$_POST["number2"]; } print $_POST["number1"].$_POST["kigou"].$_POST["number2"]."=".$answer; ?> しかし、結果では、記号部分が文字化けしてしまいました。 (例:4テ4=16、4テキ4=1) HTMLの特殊記号を試しに設定してみましたが 計算すらしてくれなくなりました。 (&times;と&divide;) こんな場合、どうすれば良いのでしょうか? また、if分の条件式にはHTMLの特殊記号は使えないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • JavaScript文字列連携に関して

    質問させて頂きます。 下記のようなテキストフォームがあったとして、submit押された時に、jsを走らせ、テキストに数値以外が入っていないかチェックしたいと考えています。 ------------------------------------------------- <input type="text" name="text_1" /> <input type="text" name="text_2" /> <input type="text" name="text_3" /> ------------------------------------------------- チェック自体は下記のような記述で行うことが出来ました。 ------------------------------------------------- if(document.form1.text_1.value.match(/[^0-9]+/)){ //文字です } if(document.form1.text_2.value.match(/[^0-9]+/)){ //文字です } if(document.form1.text_3.value.match(/[^0-9]+/)){ //文字です } ------------------------------------------------- ですが、同じif文を並べて記述したくなかったので、for文を使って記述したいと考えました。 ------------------------------------------------- for (var i=1 ; i<=3 ; i++){ if(document.form1.text_1.value.match(/[^0-9]+/)){ //文字です } } ------------------------------------------------- この時、if文内のtext_1をどのように記述すれば、text_1,text_2,text_3と変化させることが出来るでしょうか。 ※「text_ + i +」等試してみましたが、正常に動作出来ませんでした。 ご存知の方がいらっしゃいましたら、ご教授頂けると助かります。 また、質問の内容に不備な点があるかもしませんが、その際はご指摘頂けると幸いです。 よろしくお願いいたします。

  • 正規表現で記号 & アンドの検索ってサポートされてない?

    preg_matchあるいはereg関数を用いて、 &p=XX (XXは半角数字2桁)のようなパラメーターがURLに含まれるかを調べたいのですが、p=XXまではうまくいくのですが、&p=XXだと マッチしなくなります。 $url = "http://hogehoge.jp/index.php&p=01"; $pattern = "&p=[0-9]{2}"; if (preg_match($pattern, $url)) { echo "ある"; } else { echo "ない"; } ご指導のほど宜しくお願いします。

    • ベストアンサー
    • PHP
  • 条件によってmeta http-equiv="refresh"で表示するページを変更する方法

    プログラミング初心者なのですが質問させて頂きます。 ページ1で値を入力し、ページ2へ送ったとして、 入力された値が1の場合index1.phpへ、 入力された値が2の場合index2.phpへ自動的に移動するプログラムを作成しようとしています。 この場合if文を使って if(num == 1){ <meta http-equiv="refresh" content="1;URL=index1.php"> } elseif(num == 2){ <meta http-equiv="refresh" content="1;URL=index2.php"> } このように作ろうとしたのですが、 <?php ~ ?>の中ではmeta http-equiv="refresh"が動かず、 <?php ~ ?>の外ではif文が動きません。 この場合どうすればいいのかわかりません…。 どなたか助言をお願い致します。

    • ベストアンサー
    • PHP
  • フォームの文字列変換ができない

    http://morecute.bex.jp/music/user_manager/bbs_nayu/master/index9_utility01.php このフォームでAmazonの商品コードを入力すると 商品コードが埋め込まれたURLが自動生成されフォームに出力されるようにしていたのですが、 現在動きません。 このphpのソースは↓です。 <form action="index9_utility01.php"> <input type="text" name="moji" size="80" value="<?echo "&lt;a href=&quot;http://www.amazon.co.jp/gp/aw/rd.html?a=".$moji."&amp;uid=NULLGWDOCOMO&amp;url=/gp/aw/d.html&amp;lc=msn&amp;at=morecutebz0e-22&amp;dl=1&quot;&gt;アルバム情報&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.jp/e/ir?t=morecutebz0e-22&amp;l=msn&amp;o=9&amp;a=".$moji."&quot; width=1 height=1 border=0&quot; /&gt;" ?>"> <input type=submit value=sub> <font size=-1>商品コードを入力 </form> 数年前(2006年頃)はこれで問題なく出力できていたのですが・・・ phpのバージョンが変わって動かなくなったのでしょうか? サーバはXREA、及びCoreserver、PHPバージョンは 5.2.5/5.3.8 です。

    • 締切済み
    • PHP
  • preg_matchについて

    初級者です。 初歩的な質問で申し訳ないですが質問させていただきます。 データベースのテーブルにある日付にマッチすれば"マッチ"、マッチしなければ"マッチなし"と表示させたく思っております。 ~DB内任意のフォームデータ~ 0405 0406 0407 ・ ・ ~~~~~~~~~~~~~~ そこで下記のスクリプトを作ったのですが、 この方法だとDBに登録されている日付の分だけ "マッチ" "マッチなし" ・ ・ と表示されてしまします。 ==test.php== <? //$keydayはリクエストのあった日付Ymd形式 //getRecList()に関しては別ファイルにてfunction済み //["日付"]というのは上記DBの日付の項目名 $reclist = getRecList(); foreach ($reclist as $rec) { $matchday = (date_format("Ymd",$rec["日付"])); unset($found); $found[0]=1; $matchecho ="マッチ"; $unmatchecho="マッチなし"; ?> <? if (preg_match("/$keyday/",$matchday)) { ?>  <? if (!array_key_exists($matchecho,$found)) { ?>   <? echo $matchecho ?><? $found[$matchecho] = 1; ?>  <? } ?> <? } else { ?>  <? if (!array_key_exists($unmatchecho,$found)) { ?>   <? echo $unmatchecho ?><? $found[$unmatchecho] = 1; ?>  <? } ?> <? } ?> <? } ?> ?> ======== やりたい事は、 DBに登録されている日付の数に左右されずマッチする日付があったら1回だけ"マッチ"と表示、 待ちしなければ1回だけ"マッチなし"と表示させたいのです。 ・・なんかforeachで回している事自体が間違いな気がしますが、どうかよろしくお願いいたします。

    • 締切済み
    • PHP
  • 文字コードについて

    現在、PHP(EUC-JP)でプログラムを作成し、テンプレートはS-JISで表示しています。 テンプレートには下記のようにリンク先をはっています。 <a href="REPLACE">NAME</a> REPLACEとNAMEはPHP側で作成した値を置き換えています。 NAMEはmb_convert_encodingでEUC-JPをS-JISに変更していますが、リンク先には日本語の文字が含まれています。 私が、考えたものは次に遷移したいPHP以下をエンコードし、それをmb_convert_encodingするというものです。 $url="test.php?ID=".$stData[$i]['id'].&gStationName=".$stData[$i]['name']; $url_encode=urlencode($url); $all_data['test'] = mb_convert_encoding($url_encode, "SJIS", "EUC-JP"); このリンク先にカーソルをあてると、日本語はアラビア文字みたいなのが、表示されます。 しかし、このリンクをクリックすると、エンコードされたURLが表示されます。 なぜ、このような現象が起こるのでしょうか? ご教授ください。

    • ベストアンサー
    • PHP
  • PHPを使い転送

    http://******/ (index.php) にアクセスすると 瞬時に http://******/index.cgi に転送するようにするには どうしたらいいのでしょうか ソースまたは、参照URLを 書いてくれるとうれしいです あとで補足されても困りますので 先に・・・・ 今使用しているサーバーが http://******/ (index.cgi を読み込んでくれないんです ですが PHP(index.php)ですと 読み込んでくれるので 転送PHPを必要としています

    • ベストアンサー
    • PHP

専門家に質問してみよう