escaping_strategyがbothになっている環境で部分的にエスケープを解除する。

settings.ymlでescaping_strategyをbothにすると変数が常にエスケープされて便利なんですが、
記事の表示の時にエスケープされたものも再度エスケープされてしまうので
「…」などの特殊文字が表示できなくなってしまう。
これは困った。
ということで表示部分でエスケープさせないようにしてみました。

まずはこういう方法がある。

<?php echo $hoge ?>

となっている部分を

<?php echo $sf_data->getRaw('hoge') ?>

に変えてみる。

こうすることによってエスケープされていない値が入る。

メソッドを呼び出すときにエスケープしたい。

ただ、この方法だと

function hatenasyntax_list($article) {
  $article_body = preg_split('/====/',$article->getBody());
  if(isset($article_body[1])) {
    return HatenaSyntax::render($article_body[0]).
      '<p class="more">'.link_to('&gt;&gt; 続きを読む & コメントを書く/読む','article/show?id='.$article->getId()).'</p>';
  } else {
    return HatenaSyntax::render($article_body[0]).
      '<p class="more">'.link_to('&gt;&gt; コメントを書く/読む','article/show?id='.$article->getId().'#comment').'</p>';
  }
}

こういうのを

<?php echo hatenasyntax($article) ?>

で呼び出している場合、どうもうまくいかない。
どうすればいいかなーと思って調べたらこういう方法があるらしい。
参考:http://blog.symfony.jp/2006/05/03/39
参考:symfony のエスケープ処理 : アシアルブログ

$article->getBody(ESC_RAW)

ESC_RAWは何もエスケープしないようになる。
これで安心。HatenaSyntaxのおかげか、はてな文法以外はちゃんとエスケープされてるし。