Hatena::ブログ(Diary)

crazyuplog このページをアンテナに追加 RSSフィード

2009-07-27

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) ?>

で呼び出している場合、どうもうまくいかない。

どうすればいいかなーと思って調べたらこういう方法があるらしい。

参考:symfony.jp -&nbspこのウェブサイトは販売用です! -&nbspフレームワーク 開発 日記 ウェブ ゆっくり グイン ドキュメント リリース リソースおよび情報

参考:symfony のエスケープ処理 : アシアルブログ

$article->getBody(ESC_RAW)

ESC_RAWは何もエスケープしないようになる。

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

ドットが付いたURLも処理するようにしたい。

f:id:crazyup:20090727154335p:image

たとえば、http://blog.localhost/tag/namashibori.com/1

というようなURLの場合にfrontend_dev.phpでは問題ないのにfrontend.phpでは404エラーになってしまう。

調べてみたら解決方法があった。

資料:ルートにピリオドを含める - Do You PHP はてな

.htaccessを修正しなければならないようなので書いてあるとおりに修正したら直った。

Copyright © crazyup. All rights reserved.