UTF-8の


【人力検索はてな】

という文字列を、

\'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

よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/07/25 08:31:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pacochi No.2

回答回数247ベストアンサー獲得回数113

ポイント150pt

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:lionfan

id:pacochi様、おみごと!! うまく行きました!! ありがとうございます!!

たいへんハッピーです。

2011/07/25 08:29:59

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント70pt
<?php
$str = "人力検索はてな";
$str2 = str_replace('%', "\",urlencode($str)) ;
$str2 = mb_convert_encoding($str2, 'utf8', 'sjis') ;
echo $str2 ;
?>

id:lionfan

id:taknt

早々のお返事ありがとうございます!!

試してみたのですが、

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>

2011/07/25 00:45:17
id:pacochi No.2

回答回数247ベストアンサー獲得回数113ここでベストアンサー

ポイント150pt

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:lionfan

id:pacochi様、おみごと!! うまく行きました!! ありがとうございます!!

たいへんハッピーです。

2011/07/25 08:29:59
id:km1981 No.3

回答回数429ベストアンサー獲得回数49

ポイント250pt

これでどうですか?

$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:lionfan

id:km1981

ありがとうございます。これも上手く行きました!!

いるかは1人にしか差し上げられないので、その分、ポイントを多めにいたします。

今回は本当にありがとうございました!!

2011/07/25 08:31:04

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

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

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

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

回答リクエストを送信したユーザーはいません