LoginSignup
0
0

More than 1 year has passed since last update.

PHPで文字エンコーディングがWindows-31JのJSONを作る

Last updated at Posted at 2022-12-13

これは エキサイトアドベントカレンダー2022 の記事です

前提

通常、JSONの文字エンコーディングにはUTF-8を使用することになっています。
またphpではjson_encode()を使うと、デフォルトでは日本語のような文字列は\u65e5のようにUnicodeの16進数表現にエスケープされます。

だがしかし、文字エンコーディングがWindows-31JのJSONをphpで作りたい。という時の記事です。

Windows-31J とは?

Shift-JISのWindows用の拡張の一種のようです。MS932とか呼ばれることもあるようです。
Windows-31J というのは割とJava界隈での呼び方?(筆者の私見です)のようで、phpでいうとSJIS-winです。

やり方

日本語部分をUnicodeエスケープされないようにしたうえで、mb_convert_encoding()で変換してやりました。

エンコード時
$data = ['data1' => '日本語'];

$rawJson = json_encode($data, JSON_UNESCAPED_UNICODE);
$result = mb_convert_encoding($rawJson, 'SJIS-win', 'UTF-8');
デコード時
// $encodedStr はSJIS-winのjson文字列とします。

$jsonStr = mb_convert_encoding($encodedStr, 'UTF-8', 'SJIS-win');
$result = json_decode($jsonStr, true);

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0