【無料配信♪】Renta !全タテコミ作品第1話

色々と探し尽くしたのですが、

安室奈美&#x6075

のような文字列を

安室奈美恵

という普通の文字列に直す方法が解りません。

chr pack

とかが引っかかりましたが、
どうやら設定が必要なようでお手上げです。

どなたかご教授よろしくお願い致します

このQ&Aに関連する最新のQ&A

A 回答 (5件)

ANo.2です。



>パラメータとかあるのでしょうか?
マニュアルに書いてあります。

3つ目の引数(パラメータ)に適切な文字セットを指定する必要があるのでしょう。
    • good
    • 0
この回答へのお礼

自己解決しました。
HTML実体参照とかいうものだったようです。

html_entity_decode では通常の日本文字部分がデコードできないようなので、
mb_decode_numericentity を使いました。


//16進数を10進数に変換する(mb_decode_numericentityは16進数に未対応なので)
function hex2Dec($str){
$str = preg_replace_callback(
"/&#(x|X)([^;]+);/",
create_function(
'$m',
'return "&#".hexdec($m[2]).";";'
),
$str
);
return $str;
}

//UTF-8のファイルを開いて、16進数の文字列なら日本語変換を行う
if(preg_match("/&#x/i",$data[4])){
$data[4]=mb_decode_numericentity(hex2Dec($data[4]), array(0, 0xffff, 0, 0xffff), "UTF-8");
}


しばらくプログラミングから離れていたので
いい頭の体操になりました。

また質問する時は宜しくお願いいたします。

お礼日時:2009/11/23 05:58

数値文字参照というものですね。


html_entity_decode("安室奈美恵",ENT_QUOTES,"UTF-8");
で文字に戻せます。
    • good
    • 0
この回答へのお礼

都合により、プログラムがSJIS、
読み込みファイルがUTF-8というややこし環境のせいか、
画面上は日本語でも、
ソースを見るとデコードされていません。

環境設定に何かあるのかも?

一応解決しました。
ありがとうございます。

お礼日時:2009/11/23 06:23

16進数ではなく、URLエンコードかと思われます。


下のサイトにてデコードすると、文字が表示されます。
http://home.kendomo.net/board/decode/
    • good
    • 0
この回答へのお礼

ありがとうございます。
でもURLエンコードでこうはならないのでは?

自前プログラムでの変換がしたいのであります。

お礼日時:2009/11/22 15:11

html_entity_decode()関数でデコードできますよ。


http://jp.php.net/manual/ja/function.html-entity …
    • good
    • 0
この回答へのお礼

デコードできません。

画面上では漢字が表示されますが、
ソースを見ると、相変わらず

安室奈美&#x6075

が表示されてます?

パラメータとかあるのでしょうか?

独学ゆえの・・・

お礼日時:2009/11/22 15:08

>安室奈美&#x6075


これはどう見ても私には16進数には見えません
根本的に何かが間違っちゃってるのではないでしょうか?
    • good
    • 0
この回答へのお礼

思い出しました。
メールアドレスを暗号(?)化するための
あれでしたね。

お礼日時:2009/11/22 15:05

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHPにおいて16進数のアスキー文字とユニコード

文字列の明確な違いがわかりません。

たとえば16進数のアスキー文字であれば

print "\x41";
とした場合 
A
という文字が出力されます。
また
print 0x41;
とした場合はアスキー文字ではなく
65という10進数における数値が出力されますね。
さらには
print "\xe6\x96\x87\xe5\xad\x97\xe5\x88\x97";
と記述すると
文字列 という文字が出力されます。

ではそうではなくユニコード文字列というのはなんなのでしょうか?

一般てきに \u0000
という形式で表記される物ですが、コレがいまいちわかりません。
これは16進数のアスキー文字によるマルチバイト文字の再現と何がことなるのでしょうか?
たとえば、JSONなんかを単純に出力してみるとこのユニコード文字列という形式で表現されますよね?

このユニコード文字列の実態?を知りたいです。
よろしく御願いします。

Aベストアンサー

サクッと本題へ
一つ目の質問
A,出来ます
色々とやり方があります
コードを文字に変換し用意されている関数を使うこと
変換した後でコード化すれば任意のコードになるかと
・mb_convert_encoding('文字列','変換後コード','変換前コード')
・PDF_utf16_to_utf8 — 文字列を UTF-16 から UTF-8 に変換する
・PDF_utf32_to_utf16 — 文字列を UTF-32 から UTF-16 に変換する
・PDF_utf8_to_utf16 — 文字列を UTF-8 から UTF-16 に変換する
http://codezine.jp/article/detail/2668

二つ目の質問
A.はい、そうです
基本的にUnicodeと言えばUTF-16のLEなんですけれど
UTF32はマルチバイト文字列圏内では表現出来る文字が増えて嬉しい限りでしょうが
逆にマルチバイト文字列圏外では余計な情報なんですよね……
本当はUTF-8でも良いくらい、でもそれじゃマルチバイト圏内の人を蔑ろに……
なら、間を取って16にしようや……ってのが現在
なのでWindowsでUnicodeと言って使われているのは全国共通でUTF-16LE

先のURL先でffffと入れてみたら分かると思いますが1000のFなんですよね
……桁数が溢れてるんですよ、基本的にマルチバイトを使いたくなければ必要のない情報です
使いたければUTF-32にすればいいし、使いたくなければUTF-16にすればいいし
ただし、UNIX環境とかで使ってるコードは英語のみだぜ!って事ならUTF-8を使ったほうがいいです
英語圏のコードとかも入れやすいし……

サクッと本題へ
一つ目の質問
A,出来ます
色々とやり方があります
コードを文字に変換し用意されている関数を使うこと
変換した後でコード化すれば任意のコードになるかと
・mb_convert_encoding('文字列','変換後コード','変換前コード')
・PDF_utf16_to_utf8 — 文字列を UTF-16 から UTF-8 に変換する
・PDF_utf32_to_utf16 — 文字列を UTF-32 から UTF-16 に変換する
・PDF_utf8_to_utf16 — 文字列を UTF-8 から UTF-16 に変換する
http://codezine.jp/article/detail/2668

二つ目の質問
A.はい、そうです
基...続きを読む

Qmb_decode_numericentity引数

10進数数値文字参照を文字列に変換したいです。
(「変… こういうヤツを日本語にしたい)

mb_decode_numericentity第2引数に
>convmap は変換するコード領域を指定する配列です
とあるのですが、これはどうやって指定するのでしょうか?

PHP: mb_decode_numericentity - Manual
http://jp2.php.net/mb_decode_numericentit

下の方に
$convmap = array (0x0, 0xffff, 0, 0xffff);
$output = mb_decode_numericentity($intput, $convmap, 'UTF-8');
と書かれているのですが、「0x0, 0xffff, 0, 0xffff」の意味が分かりません。
「10進数数値文字」を変換したい時は、ここをどう書けば良いのでしょうか?

Aベストアンサー

>「0x0, 0xffff, 0, 0xffff」の意味が分かりません。

convmapはマニュアルにあるとおり

int start_code1, int end_code1, int offset1, int mask1

でワンセットです。当然(必要があれば)開始コード~終了コードの範囲指定で複数のセットを指定することも可能です。例示されている(0, 0xffff, 0, 0xffff)は0~65535(0x0000~0xffff)の範囲に対して、オフセットなし(0)で、そのまま変換する(マスクがフルビット)という意味です。おそらくは「これ以外の指定をする必要があるエンコード」が存在するのでしょうけど、寡聞にして知りません。少なくとも日本語を扱っている範囲では(0x0, 0xffff, 0, 0xffff)の指定で困ることがないです。



なお、数値文字参照「だけ」に拘らなければ

mb_convert_encoding($html_source, $output_encoding, 'HTML-ENTITIES');

でも出来るらしいです(phpでサポートされる文字エンコードにHTML-ENTITIESもある)。

http://www.php.net/manual/ja/mbstring.supported-encodings.php

>「0x0, 0xffff, 0, 0xffff」の意味が分かりません。

convmapはマニュアルにあるとおり

int start_code1, int end_code1, int offset1, int mask1

でワンセットです。当然(必要があれば)開始コード~終了コードの範囲指定で複数のセットを指定することも可能です。例示されている(0, 0xffff, 0, 0xffff)は0~65535(0x0000~0xffff)の範囲に対して、オフセットなし(0)で、そのまま変換する(マスクがフルビット)という意味です。おそらくは「これ以外の指定をする必要があるエンコード」が存在するの...続きを読む


人気Q&Aランキング