PEAR::Text_Wikiを使ったヘルパー

追記:20070714修正

元々E_STRICTが設定されていない場合にエラーが出てたので修正。

error_reporting($E ^ E_STRICT);
  ↓
if(($E & E_STRICT) == E_STRICT) error_reporting($E ^ E_STRICT);

app/lib/helper/WikiHelper.php

<?php
function wiki_transform($string)
{
  // 一時的にPHP5のエラー出力からE_STRICTを外す
  $E = error_reporting();
  if(($E & E_STRICT) == E_STRICT) error_reporting($E ^ E_STRICT);

  require_once('Text/Wiki.php');
  $wiki = new Text_Wiki();
  
  // 不要なパーサを無効にする
  $disable = 'html|include|embed|toc|phplookup|interwiki|wikilink';
  foreach (explode('|', $disable) as $rule) $wiki->disableRule($rule);
  // 日本語文字化け対策
  $wiki->setFormatConf('Xhtml', 'translate', HTML_SPECIALCHARS);

  $xhtml = $wiki->transform($string);

  // error_reportingを元に戻す
  error_reporting($E);

  return $xhtml;
}

※備考

  • エラー出力にE_STRICTが含まれていると、PEAR::Text_Wikiでクラス参照渡しのエラーが出るので一時的にE_STRICTを外す。
  • phplookupとかinterwikiとか使わないパーサは無効にする。
  • PEAR::Text_Wikiを日本語対応させる。

viewでは以下のように書ける。

<?php use_helper('Wiki'); ?>

<?php echo wiki_transform($text) ?>