【人力検索はてな】
という文字列を、
\'81\'79\'90\'6c\'97\'cd\'8c\'9f\'8d\'f5\'82\'cd\'82\'c4\'82\'c8\'81\'7a
というShift-JIS16進のコード列に変換する方法を教えてください。
以前も似たような質問(ただし今回とは逆方向の変換)をしてしまい、申し訳ございません。
http://q.hatena.ne.jp/1310909891
よろしくお願いいたします。
urlencode だと、文字の一部がエンコードする必要のない文字として解釈されてエンコードされない (例 : 【 (%81%79) の後ろ半分が %79 と変換されず y になる) ようなので、別の方法で変換しました。
もしかしたらもっとスマートな方法があったりするかもしれません。
<?php $str = '【人力検索はてな】'; $str = mb_convert_encoding($str, 'SJIS', 'UTF-8'); $str = preg_replace('/[\S\s]/e', 'sprintf("\\\'%02x", ord("$0"))', $str); echo $str; ?>
<?php $str = "人力検索はてな"; $str2 = str_replace('%', "\",urlencode($str)) ; $str2 = mb_convert_encoding($str2, 'utf8', 'sjis') ; echo $str2 ; ?>
早々のお返事ありがとうございます!!
試してみたのですが、
http://www.nurs.or.jp/~lionfan/change/hello.php
\'E4\'BA\'BA\'E5\'8A\'9B\'E6\'A4\'9C\'E7\'B4\'A2\'E3\'81\'AF\'E3\'81\'A6\'E3\'81\'AA
という出力結果になってしまいました。
hello.phpの中身は以下です。
<html>
<head>
<title>sample</title>
</head>
<body>
$str = "人力検索はてな";
$str2 = str_replace('%', "\\'",urlencode($str)) ;
$str2 = mb_convert_encoding($str2, 'utf8', 'sjis') ;
echo $str2 ;
?>
</body>
</html>
urlencode だと、文字の一部がエンコードする必要のない文字として解釈されてエンコードされない (例 : 【 (%81%79) の後ろ半分が %79 と変換されず y になる) ようなので、別の方法で変換しました。
もしかしたらもっとスマートな方法があったりするかもしれません。
<?php $str = '【人力検索はてな】'; $str = mb_convert_encoding($str, 'SJIS', 'UTF-8'); $str = preg_replace('/[\S\s]/e', 'sprintf("\\\'%02x", ord("$0"))', $str); echo $str; ?>
id:pacochi様、おみごと!! うまく行きました!! ありがとうございます!!
たいへんハッピーです。
これでどうですか?
$str = "【人力検索はてな】";
$str1 = mb_convert_encoding($str, 'SJIS', 'utf-8');
$str2 = preg_replace("/[a-z]/e", 'sprintf("%%%02X", ord("$0"))', urlencode($str1)) ;
$str3 = preg_replace("/\%/", "\\'", $str2);
echo $str3;
?>
id:pacochi様、おみごと!! うまく行きました!! ありがとうございます!!
たいへんハッピーです。