Escape

みずしまさんのコメントから

この問題の根底にあるのは、初心者が
自分が扱っているデータ型(プログラミング
言語がサポートしているかどうかに関わらず
)を意識してないということだと思います。
例えば、HTMLの中に入力を埋め込むとき、
大半の場合、そのデータ型は単なる文字列
であってHTMLの要素(を表す木構造)では
ないはずなんですが、テンプレート
エンジンがその両者を区別していないせい
で面倒なことになっているというか。

まぁ、そこですよね。
ついでに書いておくと、初心者云々は別にしても、そもそもエスケープ処理というのがアレだと思うケースもあるんですよね。
HTML の場合は仕方がないとしてもだ。

<?php
$command = sprintf('find %s -type f', escapeshellarg($dir));
$output = `$command`;
?>

こんなの、なんかおかしいとか思わないんだろうか。
その escapeshellarg は本当にどのプラットフォームでも安全に動くのかという心配もあるのだけど、コマンドライン丸ごと文字列で受け付けるインターフェースしかないというのがどうよっていう。
パラメータを配列なり何なりで受け取れれるほうが絶対いいと思うのだがなぁ。例えばこんなの

<?php
$output = command_output('find', array($dir, '-type', 'f'));
?>

んでまぁ、ある程度 UNIX を知っていると「それ shell を経由する意味あるか」とか思うんだよね。pipe(2)+fork(2)+execvp(3)てな感じでいいじゃねぇかと。