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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

6371閲覧

FuelPHPでhttpレスポンスヘッダーに設定した日本語文字が、AngularJS側で正しく読めない

tama2015

総合スコア63

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2017/01/08 13:00

FuelPHPでレスポンスヘッダーに、

$response->set_header('title', 'あああ');

とセットして、
AngularJSで、

$log.debug(response.headers('title'));

と取り出すと、以下のように文字化けして
しまいます。
(英語の場合は、想定どおりそのまま表示されます。)

あああ

AngularJS側で文字コードの解釈が
出来ていないようなのですが、どうしても
解決方法がわからない状況です。

どなたか、解決方法もしくは、ヒント等
頂ければ幸いです。
よろしくお願い致します。

FuelPHP

PHP

1public function after($response) { 2 3 $response = parent::after($response); 4 $response->set_header('Content-Type', 'application/json; charset=utf-8'); 5 $response->set_header('title', 'あああ'); 6 7 return $response; 8 }

AngularJS

Javascript

1angular.module('myApp') 2 .config(['$httpProvider', function ($httpProvider) { 3 $httpProvider.interceptors.push( 4 [ '$q', '$log', function ($q, $log) { 5 return { 6 'request': function (config) { 7 return config; 8 }, 9 'requestError': function (rejection) { 10 return $q.reject(rejection); 11 }, 12 'response': function (response) { 13 $log.debug(response.headers('title')); 14 return response; 15 }, 16 'responseError': function(rejection) { 17 18 } 19 }; 20 }]); 21 }])

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/01/09 07:34

phpのmbstring周りの設定はどうなっていますか?
guest

回答1

0

ベストアンサー

その文字化けは、UTF-8(BOMなし)で保存したのをUTF-7のつもりで読み込むと再現できる文字化けですね。
phpのmbstringまわりの設定が推奨設定と異なる、なんてことはないですか?

参考:【PHP】PHPをインストールしたらやっておきたい設定 - Qiita
http://qiita.com/knife0125/items/0e1af52255e9879f9332

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

わざわざafter()でヘッダー追加する例がよく理解できなくて的外れかもしれませんが。

投稿2017/01/09 07:41

編集2017/01/09 07:45
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tama2015

2017/01/09 15:26

教えて頂いた、php.iniの設定を行いましたが 文字化けのままでした。 ふと、HTTPヘッダに、日本語文字がそもそも使えるのか を確認しましたところ、印字可能なUS-ASCIIしか 利用出来ないようなので、base64でエンコードして 対応致しました。angularjs側では、以下のライブラリを 利用しました。 参考 RFC的に、HTTPヘッダってどんな値を使えるんでしたっけ?のメモ http://matope.hatenablog.com/entry/2015/08/01/192412 ヘッダ値(firld-value) には、印字可能なUS-ASCII のみ 参考 stranger82/angular-utf8-base64 https://github.com/stranger82/angular-utf8-base64
退会済みユーザー

退会済みユーザー

2017/01/10 02:41

お役に立ちませんで、すみませんでした
tama2015

2017/01/17 04:45

m6uさん 言葉が足りずすいません。 教えて頂いて設定により、サーバー側での設定は問題ない状態になったので、別の内容の考察に移ることが出来ました。 問題切り分けにアドバイスを役立たせて頂きました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問