PowerCMS™
2024年12月27日(金曜日)から2025年1月5日(日曜日)まで休業いたします。
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[ブログ] 展示会「第22回【東京】総務・人事・経理 Week 秋」を見学してきました を追加しました。

内部文字列のUTF8化と、エンコード / デコード処理

PowerCMS の内部文字列は、すべて UTF-8 で処理されます。通常、ユーザーの入力文字列や、データベースへの入出力は、PowerCMS が適切にエンコードとデコードを行うので、プラグインで文字コードを意識する必要はありません。例えば、以下の箇所では PowerCMS が自動的にエンコードとデコードをおこないます。

  • MT::Object に保存されたデータのセーブとロード
  • データベースのクエリ
  • MT::FileMgr 経由での upload モード以外でのファイル入出力 (MT::WeblogPublisher でのスペースの再構築を含みます)
  • MT::Serialize を利用した Serialize と Unserialize (注意: PowerCMS では、バイナリ値が含まれているデータ構造を Serialize する事は出来ません。)
  • MT::App::print でのダイナミック出力

ただし、以下のようなケースでは、エンコードとデコード処理を明示的に行う必要があります。

  • 外部ネットワークと通信する場合
  • MT::FileMgr を利用しないファイル入出力
  • MT::Object の blob 型で宣言されたカラムに値を保存する場合

また、L10N 用辞書などのソースコードで、コード内に UTF-8 文字列を含む場合には、UTF-8 プラグマを指定する等の対応を行ってください。
PowerCMS 5 ではプラグインの後方互換性のため、L10N/*.pm ファイルについて強制的にデコード処理を行っていますが、これはあくまで一時的な互換性確保のための処理であり、将来この機能は廃止される予定です。

サンプルコード

MTタグ ハンドラ

PowerCMS が PublishCharset に応じて自動でエンコードをおこないます。

sub _hdlr_my_tag {
   my ( $ctx, $args ) = @_;
   my $obj = MT::Entry->load(
       $args->{id});
   my $data = $obj->text;

   # do something...

   # MT does encode based on the PublishCharset
   return $data;
}

外部のウェブサービスからデータを取得する

sub _hdlr_my_tag {
   my ( $ctx, $args ) = @_;
   my $data;

   # When to receive data from web services,
   # plugin should decode as UTF-8-flagged
   return Encode::decode_utf8( $data );
}

MT::FileMgrを使わずに外部ファイルに書き出す

sub _hdlr_output_file {
   my ( $entry ) = @_;

   # Plugin should encode
   my $charset = 'utf-8';
   my $title = Encode::encode($charset, $entry->title);

   my $fh;
   open $fh ">output.txt" or die;
   print $fh <<EOT;
<?xml version="1.0" ?>
<entry>$title</entry>
EOT
   close $fh;
   return 1;
}
次は
一覧へ

お問い合わせ

お問い合わせフォームがご利用できない場合は、以下のメールアドレスからも受け付けております。
contact@alfasado.jp

製品資料ダウンロード

パンフレットデータ、提案用資料などがダウンロードできます。