2

$_SERVER['REDIRECT_SSL_CLIENT_S_DN'] コンテンツに何らかの 16 進データが含まれています。どうすればデコードできますか?

$_SERVER['REDIRECT_SSL_CLIENT_S_DN'] = '../CN=\x00M\x00\xC4\x00,\x00I\x00S\x00,\x004\x000\x003\x001\x002\x000\x000\x002/SN=..';
$pattern = '/CN=(.*)\\/SN=/';
preg_match($pattern, $_SERVER['REDIRECT_SSL_CLIENT_S_DN'], $server_matches);
print_r($server_matches[1]);

結果は次のとおりです。

\x00M\x00\xC4\x00,\x00I\x00S\x00,\x004\x000\x003\x001\x002\x000\x000\x002

私が必要とする結果は次のとおりです。

MÄ,IS,40312002

私はそれをデコードしようとしましたchr(hexdec($value));が、ほとんど動作しますが、html 入力では多くの疑問符が表示されます。

編集: 結果を含む追加のテスト。まだ完璧ではありません。配列はいくつかのエラーを明らかにします: http://pastebin.com/BC4xxqmE

4

3 に答える 3

1

を使用するutf8_encodeと、マルチバイト文字列になります。これは、PHP のマルチバイト ( mb_)関数を使用する必要があることを意味します。

だから、str_splitもううまくいきません。mb_splitまたはpreg_splituフラグとともに使用する必要があります。

$splitted = preg_split('//u', $string);

これは、コードが機能していることを示すデモです: http://ideone.com/nqeC0U

于 2013-04-19T13:56:03.997 に答える
1

chr() に相当するユニコードを試しましたか? chr mod 256 はすべての入力であるため、疑問符がすべて表示されます。

以下のコードは、chr php マニュアルの投稿の 1 つからのものです。

function unichr($u) {
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}

アップデート

//New function
function unichr($intval) {
return mb_convert_encoding(pack('n', $intval), 'UTF-8', 'UTF-16BE');
}

xC4=196 でテストすると、Ä が得られます

http://codepad.viper-7.com/3htuwW

于 2013-04-18T18:56:20.590 に答える