回答編集履歴

3

dd\(\)コメントアウト

2017/09/09 20:43

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  $s_syubetu = $request->input('s_syubetu');
24
24
 
25
- //dd($s_syubetu);
25
+ //dd($s_syubetu); //ブラウザにデバッグ出力(ここでexitします!)
26
26
 
27
27
 
28
28
 
@@ -48,11 +48,7 @@
48
48
 
49
49
  \Log::debug('SQL Debug : ', ['tests' => \DB::getQueryLog()]);
50
50
 
51
-
52
-
53
- //ブラウザにデバッグ出力(ここでexit)
51
+ //dd(\DB::getQueryLog()); //ブラウザにデバッグ出力(ここでexitします!
54
-
55
- dd(\DB::getQueryLog());
56
52
 
57
53
 
58
54
 

2

質問が追記されたので、回答をすべて書き換え

2017/09/09 20:43

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -1,21 +1,129 @@
1
- LaravelのBladeでエンコードされていることが原因ではなでしょうか?
1
+ ControllerのSQL文(LIKE)が間違っているの修正します。あと、すべてのPHPファイルのエンコードが**UTF-8になっているか必ず確認**してくださ
2
2
 
3
3
 
4
4
 
5
- `$url`先ビューが`{{ $value }}`のようにエスケープようになっていないでしょうか?
5
+ 下記コードの`dd($s_syubetu)`箇所で既日本語がユニコードエスケープされてい場合は、他のオーバーライトクラスが影響している可能性があります。`app/config`必要最低限のみのソースを残てあとはコメントアウトしてみてください。
6
-
7
- エスケープしないようにするには`{!! $value !!}`とします。
8
6
 
9
7
 
10
8
 
11
- あとは、本PHPプログラムコードが記載されているファイルと、`$url`のファイルのエンコードを確認してみてください。ファイルのエンコードは通常`UTF-8`、改行コードは`LF`のはずです。
9
+ ```php
12
10
 
13
- 異なる場合は変更してみてはいかがでしょうか。
11
+ //test Controller
12
+
13
+ ...
14
+
15
+ class testController extends Controller
16
+
17
+ {
18
+
19
+ public function search(Request $request)
20
+
21
+ {
22
+
23
+ $s_syubetu = $request->input('s_syubetu');
24
+
25
+ //dd($s_syubetu);
14
26
 
15
27
 
16
28
 
17
- それでもうまくいかない場合は、`$url`先で何を表示していのかソースを公開してください。
29
+ //デバッグ出力有効にす
18
30
 
19
- 私の環境では、質問のコードのPOSTした`$param`は正しく表示され、POSTも問題ありませんでした。
31
+ \DB::enableQueryLog();
20
32
 
21
33
 
34
+
35
+ $listpart = DB::table('tests')
36
+
37
+ ->where('syubetus.syubetu_name', 'LIKE', "%{$s_syubetu}%"); //修正
38
+
39
+ ->orderBy('updated_at', 'desc')
40
+
41
+ ->take(30)
42
+
43
+ ->get();
44
+
45
+
46
+
47
+ //storage/logs/laravel.logにデバッグ出力
48
+
49
+ \Log::debug('SQL Debug : ', ['tests' => \DB::getQueryLog()]);
50
+
51
+
52
+
53
+ //ブラウザにデバッグ出力(ここでexit)
54
+
55
+ dd(\DB::getQueryLog());
56
+
57
+
58
+
59
+ //デバッグ出力無効にする
60
+
61
+ \DB::disableQueryLog();
62
+
63
+ }
64
+
65
+ }
66
+
67
+ ```
68
+
69
+
70
+
71
+ `curl_setopt($curl, CURLOPT_POSTFIELDS, POST値)`のPOST値に配列を渡すと`multipart/form-data`でPOSTされます。ですので、あらかじめURLエンコードした文字列を渡さなくてはなりません。
72
+
73
+
74
+
75
+ ```php
76
+
77
+ $params = array(
78
+
79
+ 's_syubetu' => 'テレビ'
80
+
81
+ );
82
+
83
+
84
+
85
+ $curl = curl_init($url);
86
+
87
+
88
+
89
+ curl_setopt($curl, CURLOPT_POST, TRUE);
90
+
91
+ curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); //POST値(修正)
92
+
93
+ curl_setopt($curl, CURLOPT_FRESH_CONNECT, TRUE); //キャッシュ無効(追加)
94
+
95
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE); //リダイレクト対応(追加)
96
+
97
+ //curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //$responseにPOST先ページの結果を取得
98
+
99
+
100
+
101
+ $response = curl_exec($curl);
102
+
103
+ curl_close($curl);
104
+
105
+
106
+
107
+ //必ず確認してください
108
+
109
+ echo http_build_query($params);
110
+
111
+ ```
112
+
113
+
114
+
115
+ 上記すべてを修正しても問題が発生する場合は、苦肉の策としてControllerを下記のように`json_decode()`を入れてユニコードエスケープをデコードします。
116
+
117
+
118
+
119
+ ```php
120
+
121
+ $s_syubetu = $request->input('s_syubetu');
122
+
123
+ $s_syubetu = json_decode('["'.$s_syubetu.'"]', true);
124
+
125
+ echo $s_syubetu = $s_syubetu[0]; //テレビ
126
+
127
+ ```
128
+
129
+

1

POSTについて言及

2017/09/09 20:39

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -16,4 +16,6 @@
16
16
 
17
17
  それでもうまくいかない場合は、`$url`先で何を表示しているのかソースを公開してください。
18
18
 
19
- 私の環境では、質問のコードは正しく表示されました。
19
+ 私の環境では、質問のコードのPOSTした`$param`は正しく表示され、POSTも問題ありせんでした。
20
+
21
+