PHPで、UTF-8で入力された文字列を調べて、EUCやSJISで表示可能なら、データ量削減の為に、そちらの文字コードに変換する処理を行いたいのですが、そのようなライブラリや、うまいやり方がありましたら教えてください。

回答の条件
  • 1人2回まで
  • 登録:2007/03/20 11:53:24
  • 終了:2007/03/25 19:58:15

ベストアンサー

id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/20 16:10:41

ポイント50pt

文字コードの集合の大きさは

SJIS < EUC < UTF-8

おおよその表現可能文字

SJIS

ASCII

JIS X 0201

JIS X 0208

EUC

ASCII

JIS X 0201

JIS X 0208

JIS X 0212

JIS X 0213

UTF-8

ASCII

JIS X0208

JIS X0201

JIS X0208

JIS X0212

JIS X0213

Windows-31J

Unicode

となっています。

従って、必ず変換できる保障はありません。

単純に変換可能かどうかを調べるには

$enc1 = mb_convert_encoding($src,"EUC-JP","UT

F-8");

$enc2 = mb_convert_encoding($enc,"UTF-8","EUC-JP");

$enc3 = mb_convert_encoding($enc2,"EUC-JP","UTF-8");

3回変換処理を行い

$src と $enc2 が一致

$enc1 と $enc3 が一致

なら相互変換可能

$src と $enc2 が不一致

$enc1 と $enc3 が一致

なら変換により一部文字コードの置き換えか

変換不能文字に置き換えがされた事になります。

違う文字への置き換えを認めるなら

変換文字列をmb_substrで1文字づつ

取り出して、置き換えでない事を確認する。

mb_substitute_character

>EUCやSJISで表示可能なら

UNICODEをEUC,SJISに変換すると

漢字は、JIS X02??にの漢字コードの

単方向の変換されてしまいます。

 

http://ja.wikipedia.org/wiki/UTF-8

http://ja.wikipedia.org/wiki/EUC-JP

http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%95%E3%83%88%E7%AC%A...

id:xxmasaxx

mb_convert_encodingで変換後の結果と比較するのが一番てっとりばやそうですね。

回答有り難うございます。

2007/03/21 10:53:12

その他の回答(1件)

id:nandedarou No.1

nandedarou回答回数230ベストアンサー獲得回数342007/03/20 12:39:39

ポイント20pt

mb_detect_encoding — 文字エンコーディングを検出する

http://jp2.php.net/manual/ja/function.mb-detect-encoding.php

mb_convert_encoding — 文字エンコーディングを変換する

http://jp2.php.net/manual/ja/function.mb-convert-encoding.php

以上の関数でできると思います。

id:xxmasaxx

えーと、文字コードの変換方法は分かります。

知りたいことは、UTF-8の文字列を「解析」してEUCやSJISで代用可能か判別したいのです。

2007/03/20 13:35:37
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/20 16:10:41ここでベストアンサー

ポイント50pt

文字コードの集合の大きさは

SJIS < EUC < UTF-8

おおよその表現可能文字

SJIS

ASCII

JIS X 0201

JIS X 0208

EUC

ASCII

JIS X 0201

JIS X 0208

JIS X 0212

JIS X 0213

UTF-8

ASCII

JIS X0208

JIS X0201

JIS X0208

JIS X0212

JIS X0213

Windows-31J

Unicode

となっています。

従って、必ず変換できる保障はありません。

単純に変換可能かどうかを調べるには

$enc1 = mb_convert_encoding($src,"EUC-JP","UT

F-8");

$enc2 = mb_convert_encoding($enc,"UTF-8","EUC-JP");

$enc3 = mb_convert_encoding($enc2,"EUC-JP","UTF-8");

3回変換処理を行い

$src と $enc2 が一致

$enc1 と $enc3 が一致

なら相互変換可能

$src と $enc2 が不一致

$enc1 と $enc3 が一致

なら変換により一部文字コードの置き換えか

変換不能文字に置き換えがされた事になります。

違う文字への置き換えを認めるなら

変換文字列をmb_substrで1文字づつ

取り出して、置き換えでない事を確認する。

mb_substitute_character

>EUCやSJISで表示可能なら

UNICODEをEUC,SJISに変換すると

漢字は、JIS X02??にの漢字コードの

単方向の変換されてしまいます。

 

http://ja.wikipedia.org/wiki/UTF-8

http://ja.wikipedia.org/wiki/EUC-JP

http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%95%E3%83%88%E7%AC%A...

id:xxmasaxx

mb_convert_encodingで変換後の結果と比較するのが一番てっとりばやそうですね。

回答有り難うございます。

2007/03/21 10:53:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません