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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1849閲覧

PHPでのWebアプリにおけるブラウザによる表示の違いについて

testcase

総合スコア18

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/08/10 00:48

編集2017/08/14 12:47

PHPでWebアプリを組んでいます。

グラフをjavascriptのライブラリ(Plotly.js: https://cdn.plot.ly/plotly-latest.min.js)を使って表示しています。

単独のページに「$i = 10;」のようにあらかじめ数値をPHP側で配列に入れて
javascriptに渡してグラフを表示させるのはできました。

ところが別ページのFormからJavascriptで3個の単語をFormで送りつけると途端におかしくなります。
Formで受け取ったデータはすべて文字列のみです。

(問題点1)
グラフ表示のライブラリ(Plotly.js: https://cdn.plot.ly/plotly-latest.min.js)にうまく数値が送れません。

var array = <?php echo json_encode($array); ?>;

現状では、PCではグラフライブラリに渡す前までは表示できています。

(問題点2)
Webブラウザで,Formから送られて来た単語で検索し、その検索数を例えば以下の変数$kensakusuを例として、foreachなどのループでカウンタ変数としてぐるぐる廻して数えさせ

echo $kensakusu;

のようにして検索数を表示したいのですが、PCのWebブラウザでは問題なく表示できるのですが、
スマートフォンでは,数値が0になってしまいます。
これは、Formのページからの連携をなくせば普通にスマートフォンでも表示できます。

このようなご経験をなさった方がいらっしゃいましたらご教授いただけないでしょうか?
よろしくお願いします。
ちなみに、これまでに(int)のキャストはできる限りしています。(配列は入力時の際にはしています。)

(補足1)
言葉足らずで申し訳ありません。具体的には例えばPOSTで

$word = $_POST['word'];

として,何かを検索して
その検索結果を

$string = json_decode($respose);

のようにjson_decodeしてforeachで回しているのですが、
foreach (....) {

このforeach内で$countのようなカウンタ変数を使って件数を数えています。
この状態ですとPCでは正しく表示できていますが、スマートフォンでは0になってしまいます。

ところが、FORMのページとの連携をやめて

$word = $_POST['word'];

のかわりに、

$word = '夏休み';

のようにすると、検索件数はPCとスマートフォン共に正しく表示されますし、
グラフ表示もなされるという意味です。

すなわちFORMとの連携の有無で結果が変わるということです。

JSでのエラーメッセージは出ていないようです。

(補足2)
こんな感じです。
例えばTwitterですと、

$req = $connection->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET',
array(
'count'=>$num,
'lang' => 'ja',
'q' => $word1
));

$tweets = json_decode($req); $tw1 = $tweets->statuses; foreach ($tw1 as $val) { .... $count++; .... } echo $count;

のように、個々の検索結果毎にforeachでカウンタ変数回して
検索件数を表示しているのですが、
これがPCは上手くいくけど、スマートフォンでは初期値のままということです。

念のために、

$count = 0;
$count =(int)$count;
して、
foreach内で
$count = (int)($count + 1);
とかもしていますが、
echo $countの結果は同じでPCでは正しい件数、
スマートフォンでは0件です。

(補足3)
PCとスマートフォンも基本的には同じです。
例えばPCでは、
array(1){["word"]=>string(9) "夏祭り"}
のように普通にpostされる値がまとめられています。
スマートフォンの場合ですと、
array(3){["word"]=>string(9) "夏祭り"
["_ga"]=>string() "GA..."
["_octo"]=>string() "GH..." }
のようにクロスドメインのパラメータとCookieのパラメータでしょうか、
そのあたりが付加されるくらいですね。

(自己解決1)
(問題点2)のPCとスマートフォンとの表示の違いについては自己解決しました。
原因は文字コードに起因してました。
そこでフォームのあるページ側でのフォームの出力の文字コードを固定して、
必要に応じてアレンジしたら上手くいきました。

(問題点1)のグラフ描画のjavascriptライブラリの方ですが、
こちらについてはまだです。
どうやら、インクルードするライブラリの順番とか、
文脈にかなり依存しているようです。
(ライブラリの順番については先にjQueryからというのは最初からしてました。)

というわけで、これはもう地道に確認するしかないなということで、
こちらについては継続してやってみます。

お二方をはじめお考えいただいた皆様、どうもありがとうございました。

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

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

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

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

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

Lhankor_Mhy

2017/08/10 03:20

『途端におかしくなります』とは具体的にはどのようなことが起きていますか? jsのエラーメッセージなどはありますか?
Lhankor_Mhy

2017/08/10 03:51

検索結果をjson_decodeする、というのが気になりました。検索はもしかしてwebAPI等を使っていますか?
testcase

2017/08/10 04:06

はい、使っています。
Lhankor_Mhy

2017/08/10 04:19

ということは、APIへのリクエストがモバイルとPCで異なってしまっている、ということですよね? それをご提示いただくことは可能ですか?
Lhankor_Mhy

2017/08/10 08:41

補足拝読。繰り返しになりますが、APIのレスポンスが異なるということは、リクエストが異なるということになると思います。PCとモバイルとでのリクエストパラメータの実際の値をご提示いただくことは可能ですか?
guest

回答1

0

ベストアンサー

$word = $_POST['word'];

可能性としてはヒットしない端末から送ってきたデータがUTF8以外の
キャラクターコードだったりするのでは?
当然キャラクターコードの違う文字をつかって検索をかければ
ヒットしないので0件になることは不思議ではありません。

まずはデバッグで

PHP

1$word=filter_input(INPUT_POST,'word'); 2print urlencode($word); 3

のような表示をして、きちんと想定したキャラクターコードが得られているか確認してください。
場合によってはmb_convert_encodingをかましてもよいかも

PHP

1$word=filter_input(INPUT_POST,'word'); 2$word=mb_convert_encoding($word,"utf-8"); 3

投稿2017/08/10 10:05

yambejp

総合スコア114572

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

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

testcase

2017/08/10 14:24

ありがとうございます。なるほどと思いました。 すでにUTF-8でした。 ということで、結果はそのままでした。 引き続きがんばります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問