PHPTALでQuoteを出力する

Date
2006-08-10 (Thu)
Category
php

PHPTAL を調べています。もうすぐ公開できると思う project でも使っています。PHPTAL だと、しっかり組んだ (X)HTML をテンプレート化するのがスゴく楽。コード書かない人でも、logic が理解できる人ならつかえると思う。Symfony でも一時期 View の所で使われたみたいだし、啓蒙する人が居れば結構流行りそうだけどな〜。っていうか、GUI 被せればいいのかも。次の project でやってみようかしらん。

さて。今回はちょっと tricky ではあるんですが、javascript の文 (statement)、つまり <script> 〜〜 </script> の波線の部分を PHPTAL で出力したろ、というのが今回の課題です。普通に文を出すのはいくらでも方法があるのですが、javascript で string を表現したい時はどうしても quote を使わないといけません(多分)。

でも、PHPTAL は HTML 要素の attribute を制御構造に使うという性質上、single quote (') と double quote(") は特別な意味を持っていて、普通に出力すると実体参照(entity reference、例えば &quote;みたいなやつ)に変換されてしまいます。無理に出そうとすると Error を吐きます(当たり前)。困った所で Forum を検索して解決法を発見。

html entities with phptal

<title tal:content="structure title" />

"structure" keyword tells PHPTAL that you've done all the escaping you want to do on the value. Nothing will be escaped, including <.

というわけで正解は structure というキーワードをつけると良い、でした。そしてコードは以下のようになります。ちょと長いがまぁ、tricky なことしてるので。PHPTAL 自体のせいではありませぬ。というか、むしろこういうのは別に、例えば JSON を挿入するとかでやった方が良いのかも。

<span tal:define='global dquote string:"' />
<span tal:define="global comma string:," />
var array = new Array( <span tal:repeat="each obj/array" tal:omit-tag=""> <span tal:content="structure dquote" tal:omit-tag="" />   <span tal:content="each/path" tal:omit-tag="" />   <span tal:content="structure dquote" tal:omit-tag="" />   <span tal:condition="not: repeat/each/end" tal:content="structure comma" tal:omit-tag="" /> </span> ); </script>

以下のコードは、PHPTAL がエラーを出します。っていうか当たり前ですが。。)

<span tal:content='"'/>

Comment:0

Comment Form

Remember Me?


Trackback:0

TrackBack URL for this entry
http://blogs.grf-design.com/mt/mt-tb.cgi/183
Listed below are links to weblogs that reference
PHPTALでQuoteを出力する from The Croton

Return to Page Top