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

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

ただいまの
回答率

89.98%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 605

testcase

score 15

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からというのは最初からしてました。)

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • testcase

    2017/08/10 13:06

    はい、使っています。

    キャンセル

  • Lhankor_Mhy

    2017/08/10 13:19

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

    キャンセル

  • Lhankor_Mhy

    2017/08/10 17:41

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

    キャンセル

回答 1

checkベストアンサー

0

$word = $_POST['word']; 

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

まずはデバッグで

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/10 23:24

    ありがとうございます。なるほどと思いました。
    すでにUTF-8でした。

    ということで、結果はそのままでした。
    引き続きがんばります。

    キャンセル

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

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる