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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

15417閲覧

multipart/form-data でPOST した際の文字化け

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

1クリップ

投稿2016/03/17 10:21

###前提・実現したいこと
PHP7(Laravel5.2)で画像ファイルのアップロードと日本語テキストをPOSTしています。
コントローラでリクエストの中の文字列を取得したところ文字化けしているので、対処方法・確認項目を教えていただきたいです。

###発生している問題・エラーメッセージ
送信したテキストが文字化け(è‰¯ã‹ã£ãŸç‚¹ã®è¿½åŠ )しています。

mb_get_info()の結果は

json

1{ 2 internal_encoding: "UTF-8", 3 http_input: "ASCII", 4 http_output: "UTF-8", 5 http_output_conv_mimetypes: "^(text/|application/xhtml\+xml)", 6 func_overload: 0, 7 func_overload_list: "no overload", 8 mail_charset: "ISO-2022-JP", 9 mail_header_encoding: "BASE64", 10 mail_body_encoding: "7bit", 11 illegal_chars: 0, 12 encoding_translation: "On", 13 language: "Japanese", 14 detect_order: [ 15 "UTF-8", 16 "SJIS", 17 "JIS", 18 "ASCII" 19 ], 20 substitute_character: 63, 21 strict_detection: "Off" 22}

を返します。
mb_convert_encoding($input['caption'], 'UTF-8', 'ASCII');によって返ってくる結果は良かった点の追加となりました。

###ソースコード

FORMのaccept-charsetには"UTF-8"を指定。

html

1<form method="POST" action="http://localhost/test/test" accept-charset="UTF-8" enctype="multipart/form-data"> 2<input type="submit" value="送信"> 3<div> 4 <h4>写真</h4> 5 <ul> 6 <li><input name="photo" type="file"><input name="caption" type="text" value="キャプション"></li> 7 </ul> 8</div> 9</form>

コントローラはリクエストから取得したものをそのまま返す。

php

1public function store(Request $request) 2{ 3 $input = $request->input(); 4 return $input; 5}

###補足情報(言語/FW/ツール等のバージョンなど)
php.iniはこのような設定をしています。

[PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 output_handler = mb_output_handler zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = 17 disable_functions = disable_classes = zend.enable_gc = On expose_php = On max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off html_errors = On variables_order = "GPCS" request_order = "GP" register_argc_argv = Off auto_globals_jit = On post_max_size = 8M auto_prepend_file = auto_append_file = default_mimetype = "text/html" default_charset = "UTF-8" doc_root = user_dir = enable_dl = Off file_uploads = On upload_max_filesize = 2M max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.detect_order = UTF-8,SJIS,EUR-JP,JIS,ASCII

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

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

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

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

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

guest

回答3

0

ベストアンサー

nasuさんも述べてますが、本来は、

mbstring.http_input = pass

として使わないのがBESTです。

投稿2016/03/18 02:38

shi_ue

総合スコア4437

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

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

退会済みユーザー

退会済みユーザー

2016/03/18 03:15

回答ありがとうございます。 5系の情報を見ながら設定していました。 現在は ``` [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = auto ``` と設定しました。
guest

0

[mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = auto

と設定することで解決。

投稿2016/03/18 03:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

-mbstring.http_input = auto +mbstring.http_input = UTF-8

php.iniを上記のように変更することでひとまず解決しました。
ですが、mbstring.http_inputを決め打ちしてしまってよいものなのか疑問が残ります。

投稿2016/03/17 11:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nasu

2016/03/18 00:55

HTMLのヘッダが書かれてなかったのでわかりませんが・・・ > mbstring.http_inputを決め打ちしてしまってよいものなのか疑問が残ります。 HTMLでもUTF-8と明示してあるなら特に問題はないと思います。 それ以前にPHP7なんですよね? すでに非推奨になってますよ。 http://php.net/manual/ja/mbstring.configuration.php#ini.mbstring.http-input
退会済みユーザー

退会済みユーザー

2016/03/18 03:15

回答ありがとうございます。 5系の情報を見ながら設定していました。 現在は ``` [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = auto ``` と設定しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問