Perl で文字列を HTML --Entities-- ++数字文字参照++ に変換する方法がわからなくて、 いろいろやったり、はてなで質問してみたりした結果、 やり方が分かったのでメモ。
追記:2006-07-02T13:00:00+09:00
Perlで文字列を一般実体参照や数字文字参照に変換する方法まとめ にまとめ直しました。
追記終わり
追記:2006-06-22T18:00:00+09:00
Perlで文字列をHTML数値文字参照に変換 で北村さんに突っ込まれて気づいたので間違いの訂正。
日のような文字参照の形式は、
HTML Entities ではなく HTML数字文字参照 です。
微妙に勘違いしてました。
URI直したいですが、URI変えるのは困ることが起きそうなのでそのままにしておきます。
あとTrackback受け取るシステムが微妙におかしいです。 直さなくては。
さらに追記。
なんか表記が直ってないので直しました。
これで大丈夫なはず。
追記終了
Perl で文字列を HTML --Entities-- ++数字文字参照++ に変換する方法
追記:2006-06-22T18:00:00+09:00
この例はややオーバースペックらしいです。 詳しくは北村さんのエントリPerlで文字列をHTML数値文字参照に変換 を参照してもらえると助かります。
北村さんの方法のほうがスマートだったりする。
追記終了
結論から言えば Unicode::Escape を使えば できます。
どうやるかのかというと、
use Unicode::Escape;
my $str = '日本語文字列';
my $charset = 'utf8'; # 文字コード
$str = Unicode::Escape::escape($str,$charset);
$str =~ s/\\u([0-9a-f]+)/&#x$1;/ig; # 16進数
# 10進数の場合こっち
# $str =~ s/\\u([0-9a-f]+)/'&#' . hex($1) . ';'/egi;
こんな感じ。結構簡単だった。
しかし、問題が無いわけではないッ!
何故断言しているのでしょうか(´∀` )?っていうか何で断言できるのでしょうか。
答えは簡単です。Unicode::Escapeは、
サーバによっては入っていません
しかも
インストールがめんどくさい
からです。……言い切っちゃってるよ。いいのかよ。っていうか何なんだこのノリ。
まあそれは置いといて。Nyarla.netのサーバは2006/06/18現在 さくらのレンタルサーバのスタンダードプラン を使っているのですが、Unicode::Escapeは入ってませんでした。
で、PurePerlモジュールだったらFTPでアップロードするだけで使えるようになるんですが、 Unicode::Escapeを動かすために必要なモジュールUnicode::String がXSを利用しているためコンパイルしないとだめなので、telnetでログインして
%perl -MCPAN -e shell
cpan> install Unicode::Escape
してやる必要があります。これがめんどい理由。ちなみにレンタルサーバが シェルログインを許可して無いとできません。
もっとも一度やってしまうとあとは楽なので、問題ないかもしれませんが。
っていうか利用するのにちょっと敷居が高い気がしなくも無いです。
GoogleでCPAN レンタルサーバあたりで検索すると
色々出てくるので詳しいことはそのあたりで調べてください。
どうでもいいですが
上のほうで微妙にAA使ってる理由はUnicode::Escapeのテストするためだったりします。 うまくいってるといいけど。
追記2006-06023-10:00:00
現在Unicode::Escapeは数字文字参照のために使ってません。
追記終了
しかし、またしても長いし見づらいような……。CSSがまずいのかな?
Comments
最新のコメント20件を表示しています