スキップしてメイン コンテンツに移動

今更 5C問題

5C問題って何ぞや?と思ったので、
自分なりに理解できるように、サンプルPGを作ってみたので晒しておく。
何かの足しにでもどうぞ。

<?
header('Content-Type: text/html; charset=Shift_JIS');

//  とりあえず初期化。ポストされたらその値、されなかったら(初回起動時等)空文字で初期化する。
$name = isset($_POST['name']) ? $_POST['name'] : '';

//  バイト数を求める。
$byte = strlen($name);

//  文字数を求める。
$char = mb_strlen($name, 'SJIS-win');

//  一文字ずつ配列へ格納する。
$arrChar = array();
for ($i = 0; $i < $char; $i++) {
    $arrChar[] = mb_substr($name, $i, 1, 'SJIS-win');
}

//  変数・定数
$var = '申\';  //  PGソース中に2バイト目が5Cとなる「文字」を記述して変数へ代入するときは、
               //  該当文字に続けて「¥」を記述する。
define('MOHSU','申\');
               //  PGソース中に2バイト目が5Cとなる「文字」を定数として宣言するときも、
               //  該当文字に続けて「¥」を記述する。
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title lang="ja">5C問題のサンプル</title>
</head>
<body style="font-family: 'MS ゴシック',monospace,sans-serif;">
<form name="form_input" action="" method="post" accept-chaeset="Shift_JIS">
<input type="text" name="name" value="<?=htmlentities($name, ENT_QUOTES, 'Shift_JIS')?>" 
style="width: 200px;"/>
<input type="submit" value="go" />
</form>
<p>文字列       :<?=htmlentities($name, ENT_QUOTES, 'Shift_JIS')?></p>
<p>バイト数      :<?=$byte?></p>
<p>文字数       :<?=$char?></p>
<p>配列(var_export()):<pre><? var_export($arrChar); ?></pre></p>
<p>配列(var_dump()) :<pre><? var_dump($arrChar); ?></pre></p>
<p>配列(要素ずつecho):<? 
foreach($arrChar as $key => $val) {
    echo $val;
}
?></p>
<p>変数($var = '申\'):<?=$var?></p>
<p>定数(define('MOHSU','申\')):<? echo MOHSU; ?></p>
<p>HTML        :申込(HTML部分には\不要)</p>
</body>
</html>

このサンプルの入力欄に「申込」と入力してポストしてみて。

コメント

このブログの人気の投稿

Chatの「メッセージは投稿者によって削除されました」を非表示にする方法

Chrome拡張機能を自作してやってみよう! ♪できるかな できるかな ・・・ 無理ぽ (´・ω・`) iframeの中に、実際のメッセージのやり取りが表示されるので、 $(function(){ $('iframe[name^="spareFrame"]').contents().find('[data-is-tombstoned="true"]').hide(); }); って書いたけど An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing. って言われてダメだったよ・・・

cron で実行されたコマンドから出力されたメッセージをメールで送信する方法

本題に入る前に、まずは、sh/bash系のシェルで標準出力と標準エラー出力をリダイレクトする方法から。 現在使用中のシェルを確認するには、 # echo $SHELL とすれば確認できる。 その他、利用できるシェルを確認するには # cat /etc/shells とする。 ■リダイレクトについて commandコマンドが出力を伴うコマンドの場合、commandコマンドの出力をresult.txtへ出力するには # command > result.txt コマンドの実効結果を別のコマンドの入力値とする場合は、|(パイプ)でつなげる。 # command1 | command2 ■標準出力と標準エラー出力について ・標準出力 正常結果やコマンド実行途中に出力されるメッセージの出力先。 ・標準エラー出力 異常終了時のメッセージやエラーメッセージなど、ユーザーに気づいてほしいメッセージの出力先。 ■標準出力と標準エラー出力の両方をリダイレクトする 先のcommandコマンドのリダイレクト例のうち、result.txtへのリダイレクトは、標準出力をリダイレクトしている。そのため、標準エラー出力はリダイレクトされず、仮にcommandコマンドが標準エラー出力へメッセージを出力した場合は、result.txtではなくコンソールへ出力(表示)される。 標準出力と標準エラー出力の両方をリダイレクトして、result.txtへ出力するには、 # command > result.txt 2>&1 とする。 なお、上の例を省略なしで記述すると # command 1> result.txt 2>&1 となる。 この「1」「2」の番号について。 ・1:標準出力。通常はコンソール画面。 ・2:標準エラー出力。通常はコンソール画面。 となっている。 ちなみに、「0」は「標準入力」。通常はキーボードからの入力。 例:標準エラー出力を error.log へ出力する。標準出力はコンソールへ表示する。 # command 2> error.log 例:標準出力は result.log 、標準エラー出力は error.log へ...

同一セッションに悩まされ

Internet Explorer も、気がついてみたらFirefoxまでも、複数タブ・ウィンドウ間で同一セッションになってしまった。確か、Firefox 3.6のときは、ウィンドウが別だったらセッションも別になっていたと思ったのになぁ... で、同一セッションになって困るのは、セッション変数の扱い。 同じフォームを二つのタブやウィンドウで開くと、後から開いた方の値でセッション変数は上書きされてしまう。 これを防ぐには、フォームがはじめて表示されたときにフォームに対して一意の値を生成し、そいつを毎回POSTする。 そして、セッション配列へフォームの値を保存するときは、POSTされた一意の値をセッション配列のkey、保存したいフォームの値をvalueとすればよい。 で、いらなくなったときに、セッション配列の要素をunset()してやればいい。 この考え方は、ワンタイムチケットと同じ。 こっちも参照 してね。 ワンタイムチケットでなくても、例えばログインフォームで一意の値を生成し、そいつをフォーム間で引き回せば、同じことができる。 ただし、ログインフォームで生成した一意の値が仮に悪意の第3者に漏れた場合、何をされるかわからないので、できれば、一定間隔で再生成する仕組みを考えた方がいい。