• ベストアンサー

文字列は大文字のまま、UTF-8エンコードの英字だけ小文字にしたい

下記の方法でUTF-8エンコードをしたときに、 コードの英字が大文字になってしまい困っています。 use Encode; $str = "HOGEホゲ" $str =~ s/(\W)/'%' . unpack("H2", $1)/eg; print "$str"; 現状のエンコード後)HOGE%E3%83%9B%E3%82%B2 希望のエンコード後)HOGE%e3%83%9b%e3%82%b2 半角英数字(HOGE)は大文字のままで、 エンコードだけを小文字で書き出す簡単な方法はありますでしょうか。 (小文字でないと受け付けてくれないサイトに飛ばしたいため) 現状は正規表現でAからZまで26行繰り返しています。 $str =~s/\%([A-Z0-9]{1})?A/%$1a/g; ~ $str =~s/\%([A-Z0-9]{1})?Z/%$1z/g; よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

手元のPerlで試したところ、小文字でunpackしてくれるみたいなので、ライブラリによるのかも。 で、 $str =~ s/(\W)/'%' . lc unpack("H2", $1)/eg とか。あんまり速そうじゃないけど。

kuzumiHK
質問者

お礼

ご回答ありがとうございます。 こちらでいけました。 ありがとうございました!

その他の回答 (1)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

$str =~ s/(\W)/sprintf("%%%02x", ord($1))/eg; でどうでしょうか。

kuzumiHK
質問者

お礼

こちらも試してみたいと思います。 ありがとうございます!

関連するQ&A