質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

3940閲覧

変数を使用したpreg_grepで特定の語を含むかどうかチェックしたい。

AKYM

総合スコア28

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/05/23 02:34

さくらのレンタルサーバー上で、別のページからのPOSTを受け取ってPHPで配列を検索して結果を出すというものを作っていますが、preg_grepの結果が、空になってしまい結果が得られません。
最小限のコードにして試していますが、結果は変わらずでした。

該当のソースコード

html

1<form class="" action="test.php" method="post"> 2<input type=text name=inputtext value=""><br> 3<input type=submit value=input><br>

php

1$input = filter_input(INPUT_POST,'inputtext'); 2echo $input; 3$array = ['りんご','バナナ','いちご']; 4 5var_dump($array); 6$needle = "/".$input."/u"; 7echo $needle; 8 9$result = preg_grep($needle,$array); 10var_dump($result); 11 12if(empty($result)!==false){ 13 echo "ないよ!"; 14 exit; 15} 16print_r($result); 17

試したこと

HTMLでは「りんご」と入力しても変数には入っているようでしたが、ereg_grepでは空になるようでした。
値を直接入力(preg_grep('/りんご/u',$array))すると正常に結果が出ますが、変数を使用すると出ないようです。
また、正規表現のミスかと思いましたが、正規表現チェッカーで調べると問題ないようでした。
コード中の結果出力は以下のようになっていました。

echo $input; りんご var_dump($array); array(3) { [0]=> string(9) "りんご" [1]=> string(9) "バナナ" [2]=> string(9) "いちご" } echo $needle; /りんご/u var_dump($result); array(0) { }

補足情報(FW/ツールのバージョンなど)

PHPのバージョンは7.1です。
php.iniは以下のようになっています。

display_errors = On error_reporting="2047" log_errors=On error_log="/home/hogehoge/log/phperror.log" allow_url_include=On allow_url_fopen = On

なにとぞ、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/05/23 02:43

HTMLとPHPの文字コードはどうなっていますか?
退会済みユーザー

退会済みユーザー

2018/05/23 02:45

ereg_* は PHP 5.3.0 で 非推奨 となり、 PHP 7.0.0 で 削除 されました。
m.ts10806

2018/05/23 02:55

最初のPHPコードで問題はないように思いますが・・ りんご→Array ( [0] => りんご ) ん→Array ( [0] => りんご ) リンゴ→ないよ!
AKYM

2018/05/23 03:02 編集

文字コードは確認してみます。phpはutf8にしていましたが、分割したHTMLは指定していません。見落としていました。 php7ではeregが使えないので、preg~にしておりますが、これも非推奨でしょうか…
kei344

2018/05/23 03:09

ereg_の指摘は本文中にereg_と書かれていることについてだと思いますよ。
AKYM

2018/05/23 03:28 編集

eregは単純にミスでした。すいません。全部pregでやっています。 HTMLの文字コードをutf8にして試したところ結果がでました。 完全に見落としてました。ありがとうございます。
guest

回答2

0

こんな感じです

PHP

1<form method="post"> 2<input type="text" name="inputtext" value=""><br> 3<input type="submit" value="input"><br> 4</form> 5<?PHP 6$input = filter_input(INPUT_POST,'inputtext'); 7$result=[]; 8$array = ['りんご','バナナ','いちご']; 9if(!is_null($input)){ 10 if($input!==""){ 11 $pattern = "/".preg_quote($input,"/")."/u"; 12 $result = preg_grep($pattern,$array); 13 } 14 if(count($result)==0){ 15 echo "ないよ!"; 16 exit; 17 } 18} 19print_r($result);

投稿2018/05/23 02:56

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

頂いた質問から、htmlの文字コードをutf8にしたところ解決できました。

html

1<html lang="jp"> 2 <head> 3 <meta charset="utf-8"> 4 <title>input page</title> 5 </head> 6 <body> 7<form class="" action="test.php" method="post"> 8<input type=text name=inputtext value=""><br> 9<input type=submit value=input><br> 10</body> 11</html>

ベストアンサーしたいところですが、質問にはできないようなので、自己解決に記載します。
お騒がせしました。

投稿2018/05/23 03:32

AKYM

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問