1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

URLDECODE後の日本語の文字化けの対処について【PHP】

Last updated at Posted at 2018-07-11

URLDECODE後の日本語の文字化けの対処について

 URLでエンコードされた機種依存文字を例にします。
 「%E2%93%88」と「%E2%93%85」についてです。
 単純にデコードを行い、文字コード変換を行うと、
 前者が〇S(Sが〇枠に入った文字)、後者が〇P(Pが〇枠に入った文字)となります。
 まず、環境ですが、以下のようになります。
 ①php.ini・・・default_charset = "SJIS"
 ②xxx.php・・・charset="SJIS"
 の状態とします。この環境下で、どの文字コードで文字化けしない結果が得られるか
 検証です。
 事前に、「mb_detect_encoding($wk1, "ASCII,EUC-JP,UTF-8")」で
 文字コードを調べておきます。この文字コードは、UTF-8となりました。
 urldecode関数を使用し、UTF-8から文字コード変換を行い、上記の機種依存文字が正常に表示されるか検証です。

xxx.php
$wk1 = "%E2%93%88";
echo urldecode($wk1,'SJIS','UTF-8');   // ①の結果
echo urldecode($wk1,'CP932','UTF-8');  // ②の結果
echo urldecode($wk1,'EUC-JP','UTF-8'); // ③の結果

①、②とも「?」と出力されました。③は、残念ながら文字化けで変な漢字?が出力されました。
①、②ともSJIS関連ですが扱える漢字が②の方が多く文字化けにも対応されていますが、
ある機種依存文字は、まだ対応していないなど課題はあります。
そうしたら、これでは限界?と思っている方もいらっしゃると思いますが
実は、以下の方法で文字化けを解消することができます。

xxx.php
$wk1 = "%E2%93%88";
echo urldecode($wk1,'HTML-ENTITIES','UTF-8');   // ④の結果

これは、HTML エンティティを適切な文字に変換するというもの。
④の結果は、「Ⓢ」という機種依存文字となります。正常に表示されていますか。
上記のような、URLがエンコードされたものには、適用可能ですが、&で書かれた数値付の記号(&#xCODE)みたいなのは、これとは別の方法で変換をかけないとうまくいかないので注意が必要です。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?