onclickにSmartyから文字列を渡す場合のエスケープ処理

  • default_modifiersでhtmlを設定している場合
    • 'quotes'だけでOK
    • {~$tmp|escape:'quotes'~}
  • default_modifiersでhtmlを設定していない場合
    • 'quotes'→デフォルト('html')の二重
    • {~$tmp|escape:'quotes'|escape~}

テストコード

{~nocache~}
<script type="text/javascript">
<!--
function hoge($str)
{
//	alert($str);
//	document.write($str + "<br />");
	document.getElementById("hoge").innerHTML = $str;
}
// -->
</script>

{~$tmp = "L'Arc-en-Ciel"~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→シングル1つ
<hr />

{~$tmp = 'L"Arc-en-Ciel'~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→ダブル1つ
<hr />

{~$tmp = "\"LArc-en-Ciel\""~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→ダブルはさみ
<hr />

{~$tmp = "'LArc-en-Ciel'"~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→シングルはさみ
<hr />

{~$tmp = "\"L'Arc-en-Ciel\""~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→ダブルはさみ、シングル1つ
<hr />

{~$tmp = "'L\"Arc-en-Ciel'"~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→シングルはさみ、ダブル1つ
<hr />

{~$tmp = "\"L'Arc-en-Ciel"~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→ダブル1つ、シングル1つ
<hr />

{~$tmp = "'L\"Arc-en-Ciel"~}
×<input type="button" value="そのまま"     onclick="hoge('{~$tmp nofilter~}')" /><input type="button" value="html"         onclick="hoge('{~$tmp|escape~}')" /><input type="button" value="htmlall"      onclick="hoge('{~$tmp|escape:'htmlall'~}')" /><input type="button" value="javascript"   onclick="hoge('{~$tmp|escape:'javascript'~}')" /><input type="button" value="quotes"       onclick="hoge('{~$tmp|escape:'quotes'~}')" /><input type="button" value="quotes→html" onclick="hoge('{~$tmp|escape:'quotes'|escape~}')" />{~$tmp~}→シングル1つ、ダブル1つ
<hr />

<span id="hoge">none</span>
{~/nocache~}