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

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

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

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

Q&A

解決済

2回答

5649閲覧

ユニコードの変換方法

naonao11

総合スコア97

PHP

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

0グッド

0クリップ

投稿2018/04/16 01:37

編集2018/04/16 02:03

php

1$value = json_encode($value, JSON_UNESCAPED_UNICODE); 2$value = strstr($value,'id\":\"1\"'); 3$value = strstr($value,'},{\"id\":\"6\"',true); 4$value = strstr($value,'value\":'); 5$value = substr($value,strcspn($value,'"')+4); 6$value = strstr($value,'\"',true); 7var_dump($value);

とした際に
string(7) "\u3042"
と結果が出てきます。これについて

と表示させたいのですが、それにあたる方法が見受けられません。。。
なぜ、エンコードしたのに"あ"とならないのでしょうか?

json_encodeをした直前の$value内をvar_export()した結果については

php

1stdClass::__set_state(array( 'form' => '[{"id":"13","is_email":"false","add_to_day_hour_info":"false","add_to_day_hour_body":"false","translation":"\u4e88\u7d04\u60c5\u5831","value":"\u00a0\u30bb\u30df\u30ca\u30fc\u30a4\u30d9\u30f3\u30c8\u300016:30-17:00\u3000A\u4f1a\u5834\u00a0"},{"id":"1","is_email":"false","add_to_day_hour_info":"false","add_to_day_hour_body":"false","translation":"\u304a\u540d\u524d","value":"\u3042"},{"id":"6","is_email":"false","add_to_day_hour_info":"false","add_to_day_hour_body":"false","translation":"\u3075\u308a\u304c\u306a","value":"\u3042\u3042"},{"id":"14","is_email":"false","add_to_day_hour_info":"false","add_to_day_hour_body":"false","translation":"\u5b66\u6821\u540d","value":"\u3042\u3042"},{"id":"15","is_email":"false","add_to_day_hour_info":"false","add_to_day_hour_body":"false","translation":"\u5352\u696d\u5e74\u5ea6","value":"\u3042"},{"id":"3","is_email":"true","add_to_day_hour_info":"false","add_to_day_hour_body":"false","translation":"\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9","value":"exam@mail.com"},{"id":"12","is_email":"false","add_to_day_hour_info":"false","add_to_day_hour_body":"false","translation":"\u96fb\u8a71\u756a\u53f7","value":"\u3042"}]', ))

json_encodeをした直後の$value内をvar_export()した結果については

php

1'{"form":"[{\"id\":\"13\",\"is_email\":\"false\",\"add_to_day_hour_info\":\"false\",\"add_to_day_hour_body\":\"false\",\"translation\":\"\\u4e88\\u7d04\\u60c5\\u5831\",\"value\":\"\\u00a0\\u30bb\\u30df\\u30ca\\u30fc\\u30a4\\u30d9\\u30f3\\u30c8\\u300016:30-17:00\\u3000A\\u4f1a\\u5834\\u00a0\"},{\"id\":\"1\",\"is_email\":\"false\",\"add_to_day_hour_info\":\"false\",\"add_to_day_hour_body\":\"false\",\"translation\":\"\\u304a\\u540d\\u524d\",\"value\":\"\\u3042\"},{\"id\":\"6\",\"is_email\":\"false\",\"add_to_day_hour_info\":\"false\",\"add_to_day_hour_body\":\"false\",\"translation\":\"\\u3075\\u308a\\u304c\\u306a\",\"value\":\"\\u3042\\u3042\"},{\"id\":\"14\",\"is_email\":\"false\",\"add_to_day_hour_info\":\"false\",\"add_to_day_hour_body\":\"false\",\"translation\":\"\\u5b66\\u6821\\u540d\",\"value\":\"\\u3042\\u3042\"},{\"id\":\"15\",\"is_email\":\"false\",\"add_to_day_hour_info\":\"false\",\"add_to_day_hour_body\":\"false\",\"translation\":\"\\u5352\\u696d\\u5e74\\u5ea6\",\"value\":\"\\u3042\"},{\"id\":\"3\",\"is_email\":\"true\",\"add_to_day_hour_info\":\"false\",\"add_to_day_hour_body\":\"false\",\"translation\":\"\\u30e1\\u30fc\\u30eb\\u30a2\\u30c9\\u30ec\\u30b9\",\"value\":\"exam@mail.com\"},{\"id\":\"12\",\"is_email\":\"false\",\"add_to_day_hour_info\":\"false\",\"add_to_day_hour_body\":\"false\",\"translation\":\"\\u96fb\\u8a71\\u756a\\u53f7\",\"value\":\"\\u3042\"}]"}'

となっております。

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

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

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

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

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

m.ts10806

2018/04/16 01:42

さすがにメールアドレス部分はマスク掛けられた方が良いような。
naonao11

2018/04/16 01:44

抜けていました、、、ありがとうございます!
m.ts10806

2018/04/16 01:46

json_encode($value, JSON_UNESCAPED_UNICODE); 直後の$valueをvar_dump()した場合はどうなりますか?また配列情報を提示されるのであればvar_dumpよりもvar_exportの方が、回答者が再現確認しやすい形式となります。
m.ts10806

2018/04/16 01:48

出力結果も「コード」なので同じようにコードブロックで囲っていただけると、更に助かります。
naonao11

2018/04/16 01:56

追記させていただきました、よろしくお願いします。。。
m.ts10806

2018/04/16 02:00

json_encode()掛ける前の時点で\u3042になっているように思いますが・・。json_encode掛ける前の情報をvar_export()していただいて良いですか?
naonao11

2018/04/16 02:03

追記させていただきました、よろしくお願いします。。。
m.ts10806

2018/04/16 02:06

これを回答にすべきか迷うのでこちらに書きますが、ユニコードエンコードされた後の文字列をどうにかするのではなく、ユニコードエンコードされないように工夫された状態のデータを作るほうが何倍も楽と思います。
naonao11

2018/04/16 02:23

なるほど。。。ありがとうございます。。。一度デコードされている箇所について調べてみます
m.ts10806

2018/04/16 02:26

あとはこのデータがどのように渡されて、どのように使いたいのかといった仕様面というか大目的部分というか、その辺りを明示されたほうが解決に向かうのではないかと思います。ポイントはあくまで枝葉部分なので、そこだけでは目標に進まない可能性もあります。
guest

回答2

0

自己解決

一度UTF-16をUTF-8に直して、preg_replace_callbackを用いて文字に起こさせる。
そのあと、
$sample = str_replace('','', $sample);
を行うことで¥を削除することが可能

投稿2018/04/16 03:51

naonao11

総合スコア97

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

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

0

json_encode したというのでしたら、多分エスケープされていますね。 jsonを取り扱う上では問題無いと思います。

エスケープのルールを変えたいのでしたら次の記事が参考になると思われます。

json_encodeでマルチバイト文字をエンコード

または公式マニュアルを参考のとこ。
PHP:json_encode

json_encode 関数の第二引数に JSON_UNESCAPED_UNICODE を与えるとエスケープされないみたいです。

投稿2018/04/16 02:17

juner

総合スコア110

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

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

m.ts10806

2018/04/16 02:19

質問にてJSON_UNESCAPED_UNICODEが使われたコードが提示されています。 そもそもjson_encode()前にエスケープされた文字列の状態で来ているのでJSON_UNESCAPED_UNICODE の指定は意味がない状態になってます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問