人気記事

広告

記事検索

MOVION.netについて

WEB技術に関することや、気になるWEBサイトなどについて個人的なメモを残すためのブログです。

その他運営サイト

かかわっているサイト

2008年03月5日(水)

Zend_MailのsetSubjectが僕をいじめる

Zend_MailとSmartyを組み合わせた、メール送信のクラスを作ってみたのですが、
どうも長いタイトルのメールを送ると、タイトルの途中に「?」が入るからソースを見てみたら。

  1.    public function setSubject($subject)
  2.     {
  3.         if ($this->_subject === null) {
  4.             $subject = strtr($subject,"\r\n\t",‘???’);
  5.             $this->_subject = $this->_encodeHeader($subject);
  6.             $this->_storeHeader(‘Subject’, $this->_subject);
  7.         } else {
  8.             throw new Zend_Mail_Exception(‘Subject set twice’);
  9.         }
  10.         return $this;
  11.     }

って、おい。

そりゃ「?」になるよ。
ググったら、ふらっとさんのページやいしなお!さんのページに同じことが書かれてました。

_encodeHeaderメソッドとかを見るとやりたいことはわからないではないが、
いずれにしても日本語(に限らないようだけど)送るときに困っちゃいます。

RFCでいうとこの辺か。

RFC 2822 (Internet Message Format)

RFC 2047 (MIME Part Three:Message Header Extensions for Non-ASCII Text)

とりあえず、RFC 2822の「SHOULD be no more than 78 characters」この辺の、”・・べき”は、
見なかったことにして、かつ長すぎる(符号化後の半角換算998文字)タイトルは考慮しないってことで、
いしなお!さんのとこのように、改行は削除する仕様にしちゃいました。

2008年02月29日(金)

PHPのフレームワーク

PHPのフレームワークを自分用メモ。 以下、主なPHPのフレームワーク。

  • Symfony
    • http://www.symfony-project.org/
    • PHP5
    • The MIT License (他にも含まれてるけど・・・)
    • ベースはmojaviで、Railsっぽくなっている。
    • 今のところ、一番完成度が高い気がする。
    • 一人で作るようなWEBアプリにはあまり使う気がしない。
  • Zend Framework
    • http://framework.zend.com/
    • PHP5
    • New BSD License
    • まんま、Zendさんがつくってる。
    • 今のところ、自動生成系の機能はなさげ。
    • ライブラリ的要素の方が多い気が。
  • CakePHP
    • http://cakephp.org/
    • PHP4 / 5  (5対応というより、5でもエラーが出ないという感じで、プログラム自体が5でかかれている訳ではない。)
    • The MIT License
    • ケーキ(Cake)を焼けたり(bake)、名前の付け方がちょっとおもしろい。
    • ちょっとしたWEBアプリを作るにはよさげ。
  • Ethna
  • Piece Framework
    • 調査中

以下、現在はたぶん開発が停止している。

  • Maple (和製。DIコンテナとか)
  • Mojavi (一時期流行った。ダミーのホームページが復活してるみたい・・リンク押せないけど http://www.mojavi.org/
  • Agavi (Mojaviの派生。Railsとは違った方向に進んでたが)
2008年02月11日(月)

assign時にデフォルトでhtmlspecialcharsを行うようにする

個人的にお遊びサイトを開発中(ポンティ)なのですが、
ふとタグを入れて投稿したらhtmlエスケープされてない・・・。
駄目駄目じゃないっすか。

普段、標準でエスケープされるフレームワークを使ってて、
久しぶりにSmartyを使ったもんだから、
Smartyってデフォルトでエスケープされなかったっけ?
と思ってしまいました。

Smartyにdefault_modifiersってのがあるようなので、
それでもできそうですが、なんかめんどくさそうだったので(http://blog.asial.co.jp/309)、
assignの時にエスケープするようにしてみました。

フレームワークはZend Frameworkを使ってて、Smarty用Viewの具象クラスはもちろん作ってたので、
そこに手を加えてみました。
Zend FrameworkでSmartyを使う方法などはZendのドキュメントなどを参照のこと。

  1. require_once ‘Zend/View/Interface.php’;
  2. require_once ‘Smarty.class.php’;
  3.  
  4. class Pontiy_View_Smarty implements Zend_View_Interface
  5. {
  6.         protected $_smarty;
  7.  
  8. // 大部分省略してます
  9.         public function assign($spec, $value = null)
  10.         {
  11.                 if (is_array($spec)) {
  12.                         $spec = $this->h($spec);
  13.                         $this->_smarty->assign($spec);
  14.                         return;
  15.                 }
  16.                 $value = $this->h($value);
  17.                 $this->_smarty->assign($spec, $value);
  18.         }
  19.  
  20.         public function assignNoEscape($spec, $value = null)
  21.         {
  22.                 if (is_array($spec)) {
  23.                         $this->_smarty->assign($spec);
  24.                         return;
  25.                 }
  26.                 $this->_smarty->assign($spec, $value);
  27.         }
  28.  
  29.         private function h($string){
  30.             if(is_array($string)){
  31.                 return array_map(array($this,‘h’),$string);
  32.             }else{
  33.                 return htmlspecialchars($string,ENT_QUOTES);
  34.             }
  35.         }
  36.  
  37. }

hメソッドは関数でよいのだけど、基本関数群を置く場所を考えてなかったので、
とりあえずクラスの中につっこんでしまいました・・・。

2008年02月11日(月)

Wordpressでプログラムのソースコードをハイライト表示

ここのブログはwordpressを使っているのですが、ブログにプログラムのソースコードを載せるなら、やっぱりキレイに表示したい。
というわけで、ハイライト表示ができるようにプラグインを組み込んでみました。
その、作業履歴です。

1.GeSHi (Generic Syntax Highlighter)をダウンロード
ダウンロードは以下から、
http://sourceforge.net/project/showfiles.php?group_id=114997

GeSHiのサイトはこちら。
http://qbnz.com/highlighter/

2. GeSHiを丸ごとアップロード
とりあえず、公開領域にgeshi/ディレクトリごとアップロード

3.Source Code syntax highlighting plugin for WordPress (V1.2)をダウンロード
以下のページのInstrationのとこにあるリンクからダウンロード
http://www.deanlee.cn/wordpress/code_highlighter_plugin_for_wordpress/

4.プラグインディレクトリに3でダウンロードしたのをアップロード
ダウンロードした、deans_code_highlighter_v1.2.zip を解凍して、deans_code_highlighterディレクトリごと、
wp-content/plugins のディレクトリにアップロード。

5.プラグインを有効にする
wordpress管理画面の、「プラグイン」のメニューでDean’s Code Highlighterってのが表示されてると思うので、
アクションの「有効化」をクリック。

6.お好みにあわせてCSSを変えてもよし
ハイライトカラーを変えたい場合は、
wp-content/plugins/deans_code_highlighter/geshi.css
を編集してください。

でサンプル。
<pre lang=”php”>< ?
$value = “HELOO”;
$language = “PHP”;
print $value . ‘ ‘ . $language;
?></pre>

こんな風に書くと、以下のように表示されます。

  1. < ?
  2. $value = "HELOO";
  3. $language = "PHP";
  4. print $value . ‘ ‘ . $language;
  5. ?>

もちろん、投稿時には「ビジュアル」ではなく「コード」で書かないと反映されません。
ところで、GeSHiは日本語読みはどうなるんでしょうか?
geshi/geshi.php
なんかは、普通に「ゲシゲシピーエイチピー」!?

wordpress, PHP | 2008年02月11日(月) | コメント(3) | トラックバック(0)