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('>> 続きを読む & コメントを書く/読む','article/show?id='.$article->getId()).'</p>'; } else { return HatenaSyntax::render($article_body[0]). '<p class="more">'.link_to('>> コメントを書く/読む','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のおかげか、はてな文法以外はちゃんとエスケープされてるし。