広告

記事検索

MOVION.netについて

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

その他運営サイト

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日(月) | コメント(0) | トラックバック(0)