2008年03月5日(水)
Zend_MailとSmartyを組み合わせた、メール送信のクラスを作ってみたのですが、
どうも長いタイトルのメールを送ると、タイトルの途中に「?」が入るからソースを見てみたら。
-
public function setSubject($subject)
-
{
-
if ($this->_subject === null) {
-
$subject =
strtr($subject,
"\r\n\t",
‘???’);
-
$this->_subject = $this->_encodeHeader($subject);
-
$this->_storeHeader(‘Subject’, $this->_subject);
-
} else {
-
throw new Zend_Mail_Exception(‘Subject set twice’);
-
}
-
return $this;
-
}
って、おい。
そりゃ「?」になるよ。
ググったら、ふらっとさんのページやいしなお!さんのページに同じことが書かれてました。
_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のフレームワーク。
- Symfony
- Zend Framework
- 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日(月)
個人的にお遊びサイトを開発中(ポンティ)なのですが、
ふとタグを入れて投稿したらhtmlエスケープされてない・・・。
駄目駄目じゃないっすか。
普段、標準でエスケープされるフレームワークを使ってて、
久しぶりにSmartyを使ったもんだから、
Smartyってデフォルトでエスケープされなかったっけ?
と思ってしまいました。
Smartyにdefault_modifiersってのがあるようなので、
それでもできそうですが、なんかめんどくさそうだったので(http://blog.asial.co.jp/309)、
assignの時にエスケープするようにしてみました。
フレームワークはZend Frameworkを使ってて、Smarty用Viewの具象クラスはもちろん作ってたので、
そこに手を加えてみました。
Zend FrameworkでSmartyを使う方法などはZendのドキュメントなどを参照のこと。
-
require_once ‘Zend/View/Interface.php’;
-
require_once ‘Smarty.class.php’;
-
-
class Pontiy_View_Smarty implements Zend_View_Interface
-
{
-
protected $_smarty;
-
-
// 大部分省略してます
-
public function assign($spec, $value = null)
-
{
-
-
$spec = $this->h($spec);
-
$this->_smarty->assign($spec);
-
return;
-
}
-
$value = $this->h($value);
-
$this->_smarty->assign($spec, $value);
-
}
-
-
public function assignNoEscape($spec, $value = null)
-
{
-
-
$this->_smarty->assign($spec);
-
return;
-
}
-
$this->_smarty->assign($spec, $value);
-
}
-
-
private function h($string){
-
-
-
}else{
-
-
}
-
}
-
-
}
hメソッドは関数でよいのだけど、基本関数群を置く場所を考えてなかったので、
とりあえずクラスの中につっこんでしまいました・・・。
2008年02月11日(月)
ここのブログは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>
こんな風に書くと、以下のように表示されます。
-
< ?
-
$value = "HELOO";
-
$language = "PHP";
-
print $value .
‘ ‘ .
$language;
-
?>
もちろん、投稿時には「ビジュアル」ではなく「コード」で書かないと反映されません。
ところで、GeSHiは日本語読みはどうなるんでしょうか?
geshi/geshi.php
なんかは、普通に「ゲシゲシピーエイチピー」!?