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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

3233閲覧

urlパラメータに日本語や英数字の混合は良くないのでしょうか?

pecchan

総合スコア555

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/09/26 07:13

編集2018/09/26 08:23

cakephp(2.7.8)
PHP 5.6
MySQL 5.6

上記の環境で簡単なクイズアプリを作りました。

以下のように回答を、URLパラメータで渡してます。

http://hogepiyo?aaa?&answer=消費税

この時、以下のようにパラメータに%や数値が含まれていると、不具合がありました。

http://hogepiyo?aaa?&answer=消費税は8%です

Webアプリは初めてでよく分からないのですが、
通常、パラメータは何かメソッド等で変換をかますのでしょうか?

そもそもパラメータには日本語はあまり使わないものでしょうか?

分かる方教えていただけないでしょうか?
宜しくお願い致します。


同日追記
失礼しました。ソースコードをまったく記載してなかったので追記します。
コントローラで受ける際にエンコードすれば解決出来るのかと思います。

ビュー側

ctp

1<?php echo $this->Form->create('Questions', array('controller'=>'Questions', 'url' => '/Questions/', 'type' => 'GET', 'name' => 'frmExam')); ?> 2 3<?php foreach ($choices as $ch): ?> 4 5 <p><button type='submit' name='answer' value='<?= h($ch); ?>' class="btn btn-success btn-lg btn-block"><?= h($ch); ?></button></p> 6 7<?php endforeach; ?> 8 9<?php if ($question_index != 0 && $question_index + 1 != $question_count){ ?> 10 <p><button type="submit" name="end" value="true" class="btn btn-primary btn-lg btn-block">ここまでで終了して採点する</button></p> 11<?php } ?>

表示されるhtml

html

1 <form action="/kako/Questions/" controller="Questions" name="frmExam" id="QuestionsIndexForm" method="get" accept-charset="utf-8"> 2 3 <input type="hidden" name="question_index" value="7"> 4 5 <div class="row"> 6 <div class="col col-md-12"> 7 8 9 <p><button type='submit' name='answer' value='1.いっさい認められていない' class="btn btn-success btn-lg btn-block">1.いっさい認められていない</button></p> 10 11 <p><button type='submit' name='answer' value='2.運用資産全体の10%以内に制限されている' class="btn btn-success btn-lg btn-block">2.運用資産全体の10%以内に制限されている</button></p> 12 13 <p><button type='submit' name='answer' value='3.運用資産全体の20%以内に制限されている' class="btn btn-success btn-lg btn-block">3.運用資産全体の20%以内に制限されている</button></p> 14 15 16 17 18 <p><button type="submit" name="end" value="true" class="btn btn-primary btn-lg btn-block">ここまでで終了して採点する</button></p> 19 </div> 20 </div> 21 </form> 22

コントローラ側
不具合=パラメータに%などがあった場合に、戻り値が空になったため。
パラメータが問題と思い、正誤判定メソッドの中身までは追っていません。

php

1 2public function index() { 3 4 $answer = $this->request->query['answer']; 5 6 //一部省略・・・ 7 8 //正誤判定を行うメソッド 9 $seigo = score($question, $answer); 10 11 12}

URLパラメータは、以下のように渡してます
http://localhost/Questions/?question_index=6&answer=消費税は10%になる予定

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

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

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

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

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

guest

回答2

0

ベストアンサー

どういう風にそのURLが実行されてどのように受け取ってどのような不具合があったのか質問内に書かれていないので分かりませんが、通常はurlencode()をかけます。

追記。
ところで例示のURLは?が2つついていますが、これは何でしょうか?
正しくQueryStringとして認識されるのか疑問です。
起きたという不具合内容(エラーメッセージとか?)を記載していただけると
もう少し具体的な回答ができますので、実際のコードと共に追記願います。

投稿2018/09/26 07:24

編集2018/09/26 07:37
m.ts10806

総合スコア80850

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

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

m.ts10806

2018/09/26 08:08

了解です。 ただ、回答の冒頭部分に書いたようにurlencodeをすることで解決は可能なはずの問題なので、試してみてください
pecchan

2018/09/26 08:21

有難う御座います。 urlencodeですね。試してみます!
pecchan

2018/09/27 00:30

まだ根本原因(合否を取る計算が取れない問題)は、解決してないのですが、 質問の答え自体は正確に得ましたので解決とさせていただきます。 この度は有難う御座いました。
m.ts10806

2018/09/27 01:04

解決したようで何よりです。 引続き頑張ってください
m.ts10806

2018/09/27 01:06

個人的には、ですが ラベルで説明文つけてるならvalueはコードとか英数字だけにしておいた方が扱いやすいとは思うので、実装進めてく上で検討してみてください。 ※データベースに入れる場合だとマスターとデータの関連性持たせたり正規化のためにコードだけにすることがほとんどです
pecchan

2018/09/27 07:34

>valueはコードとか英数字だけにしておいた方が扱いやすい なるほど。 確かにそうですね! 気付きませんでした、有難う御座います!!
guest

0

どこに、何を送りたいのかさっぱりわかりませんが

PHP

1$url="http://hogepiyo?".urlencode("aaa?&answer=消費税は8%です"); 2print $url; 3//もしくは&や=は活かしたいなら 4$url="http://hogepiyo?".preg_replace_callback("/[^&=]+/",function($x){return urlencode($x[0]);},"aaa?&answer=消費税は8%です"); 5print $url; 6

投稿2018/09/26 07:36

編集2018/09/26 07:39
yambejp

総合スコア114839

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

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

pecchan

2018/09/27 00:33

有難う御座います。 せっかく具体的なコードまで記載いただき、ベストアンサーにしたかったのですが わずかな差ですが、先に回答していただいた方に付けさせていただきました、申し訳ございません。 この度は有難う御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問