2007/12/5 水曜日

INPUT タグ maxlengthの罠

Filed under: html — admin @ 21:47:31

2バイト系の日本語文字と1バイト系の文字と関係なく文字数の指定だったり、バイト数で制限していたりブラウザによってマチマチなので厄介
というわけでJavaScriptで解決することになるのだが、実はこの手の資料がなかったりする。。。。

■ 参考
JavaScriptで文字列の長さをチェックする。

No Tags

Smartyでescape

Filed under: Smarty — admin @ 20:42:16

SmartyでXSS対策で、デフォルトでhtmlspecialcharsをかけるには

$smarty->default_modifiers = array('escape:"html"');

とすればいいが、
foreachをまわすとエラーが出てしまう。

原因は

Smarty/plugins/modifier.escape.php

が配列に対応していないから。
だいぶ前に話しには聞いていたのだけど、まだ対応してなかったのね。

対応策は

        case 'html':
            if(is_array($string)){
              return array_map('htmlspecialchars',$string);
/*
              return array_map(
                       'htmlspecialchars',
                       $string,
                       array_fill(1,count($string),ENT_QUOTES),
                       array_fill(1,count($string),$char_set)
                     );*/   

            }else{
              return htmlspecialchars($string, ENT_QUOTES, $char_set);
            }

として、array_mapを使って配列に対応する。
array_mapは引数が1つの時には便利なのだが、2つ以上になると処理が非常に面倒になる。
なのでここでは、キャラセットなどの引数は無視して、引数を1つとしている。
※ コメント部分はこのなごりです。ちなみにこれは未完成なのでまともに動きません。
一応解説しておきますと、array_mapは引数すべてが配列でなければいけないので、
例えば引数1だけ配列で、引数2以降は固定というよくあるパターンのときに非常に困ります。
そこで、引数2以降はarray_fillを使って引数1の配列の分をcountして配列を生成
しているのがコメント部分なのですが、実はこれだとダメなのです。
というのは、さらに多次元配列だった場合にこれだと対処できないからです。
もし本当に完璧に処理したいのであればPHP マニュアルの
array_map関数のユーザー投稿にそのものずばりがあるので参考にしてみてください。
さらに、foreachで2重にエスケープがかかっちゃうので、その時は
foreach中で|smarty:nodefaultsをかけておくように。

{foreach from=$html|smarty:nodefaults item=tag}
{$item}
{/foreach}

■ 参考リンク

No Tags

肥え続けるTomcatと胃を痛めるトラブルハッカー (1/3) - @IT

Filed under: JAVA — admin @ 18:31:42

肥え続けるTomcatと胃を痛めるトラブルハッカー (1/3) - @IT

No Tags

【レポート】JavaScript + Canvasでレイトレを! - “Flog.RayTracer Canvas”の使い心地 | エンタープライズ | マイコミジャーナル

Filed under: canvas, JavaScript — admin @ 18:31:12

【レポート】JavaScript + Canvasでレイトレを! - “Flog.RayTracer Canvas”の使い心地 | エンタープライズ | マイコミジャーナル

No Tags

ESCキーの入力を検出するJavaScriptがあれば教えてください。 要するに実現したいのは、IEでテキストエリアに入力中に(IME確定後の)ESCで入力内容がクリアされてしまいま.. - 人力検索はてな

Filed under: JavaScript — admin @ 18:30:47

ESCキーの入力を検出するJavaScriptがあれば教えてください。 要するに実現したいのは、IEでテキストエリアに入力中に(IME確定後の)ESCで入力内容がクリアされてしまいま.. - 人力検索はてな

No Tags

cl.pocari.org - canvas を使った JavaScript によるグラフ描画ライブラリ

Filed under: canvas — admin @ 18:30:21

cl.pocari.org - canvas を使った JavaScript によるグラフ描画ライブラリ

No Tags

displayプロパティを初期値に戻す為のJavaScript[to-R]

Filed under: css — admin @ 18:29:58

displayプロパティを初期値に戻す為のJavaScript[to-R]

No Tags

日本語テキストをテーブルで表示する:高速化バージョン

Filed under: JavaScript — admin @ 18:28:48

日本語テキストをテーブルで表示する:高速化バージョン

No Tags

DHTMLでポップアップ

Filed under: 未分類 — admin @ 18:27:41

サイトを開くと自動的にポップアップのウィンドウを開く方法は、最近はポップアップブロッカーがあるため、代替の方法を探しています。 CSSをつかって画面上にレイヤーを重.. - 人力検索はてな

No Tags

cssでDIV要素を縦方向で真ん中に揃える。

Filed under: css — admin @ 18:15:47

span要素や、テーブル要素であれば

  vertical-align

を使えばいいのですが、DIV要素では使えません。

 line-height

そこで、DIV要素中のテキスト1行でなければならないという条件はありますが、
文字列の高さを指定するプロパティline-heightを使うことでそれが実現できます。

それ以外にも、display:table-cellを使って要素自体をテーブル要素に変えてから、vertical-alignを使うという荒業もありますが、ブラウザに依存するのでお勧めできません。

DIV要素中のテキストが2行に渡る場合などは、実現可能ですが、画像を上下にはさむなど
非常に面倒なことをする必要があります。
■参考

■ 備考 ぐぐると text-valign なるcss要素ものっていたけど、実際にあるのかな

text-valign
No Tags
次のページ »