2007年8月25日

代入された変数を書き換えると代入した変数まで書き換わる件

カテゴリー: JavaScript — admin @ 9:11 PM

■トラブルが起こるサンプルソース

<script type="text/javascript">
var x = new Array("1","2","3");
var y;
var a = 10;
var b;
var s = 'test';
var t;
function test(){
    y = x;
    y.pop();
    alert(x);//1番目のアラート
    b = a;
    b ++;
    alert(a);//2番目のアラート
    t = s;
    t = t.substring(0,2);
    alert(s);//3番目のアラート
}
</script>

■上記の実行結果

2番目はそのまま「10」と表示される

3番目もそのまま「test」と表示される

1番目は大方の予想に反して「1,2」と表示される

えっなんで「1,2,3」じゃないの?と普通は思う

■解説

代入「=」とは、そっくりそのままコピーされたと考えるのではなく、常にその値が入っているメモリーの場所情報が渡されたと考えなくてはならない

これは膨大な情報を持った変数の代入などが高速で行えるという言語仕様上のメリットがある

ところがサンプルソースのような違いが現れる。それはtypeofによる分類で

  • number
  • boolean
  • string
  • undefined
  • null

の型になるものはコピーされ、それ以外はメモリー情報が渡されているからである

■サンプルに加えて下さい

以下のコードをサンプルに加えて実行すると、アラートが3回増え「object、number、string」と表示される

つまりobjectは代入では単純にコピーはされないという事だ

alert(typeof(x));//object
alert(typeof(a));//number
alert(typeof(s));//string

■じゃぁ配列をコピーするにはどうしたらイイの?

以下のようにすると一応はコピーができる。

var a = new Array("test1","test2","test3");
var b = a.concat ();
var c = a.slice (0);

■追記

1年半経った今、僭越ながら多少なりとも技術力も上がりました。そこで思ったのですが、「クローンを作る」という行為になかなか需要がない事が分かりました。従いまして、個人的にはクローンが欲しくなる設計を見直した方がイイとは思ってます。

2007年8月25日

MdNの講座に行って来ました…初心者の為のJavaScript…初日

カテゴリー: 日記 — admin @ 8:14 PM

■前提

  • 人により校風に合う合わないがあるのであくまでも参考とする事
  • 個人の主観である面も含まれる
  • 筆者は初心者ではないが「基本に振り返ってみる」という観点から参加している事

■長所

  • 教え方は非常に丁寧でウマイと思う。なんか塾の教師!?みたい
  • 少人数制で質問はしやすい。筆者が参加したときはクラスで4人。席が8個しかなかったので最大でも8人という事になる
  • 受付の人は好感触(これは以外に重要)
  • 課題、授業内容は本当に初心者向けである
  • 設備が非常にキレイ&おしゃれ!これは見たまんま。紅茶、コーヒーが飲み放題というのはGOOD!

■短所

  • 全部Macというのは正直チョットきつい。一応Windowsユーザー用に(右クリックとか)設定はしてくれ問題なく操作は出来るのだが、やはり少し使い勝手は何かちがう…

■その他

  • JavaScriptを学び始めて1ヶ月くらいの人が行くと効果が最大限に発揮されるかもしれません(用途、目的にもよるが上級者~中級者には簡単に感じる)
  • やっぱりオレはMacよりもパソコン派
  • ちなみに某スクールより、料金が安いと噂を耳にした
  • ちなみに某スクール(他の人の感想なので名前は伏せさせて下さい)は、講師により差が激しいと悪い噂を耳にした

次回もまたレポート書きまっす

2007年8月25日

Dreamweaver MX(初期設定)で.htmの拡張子を.htmlに変更しよう

カテゴリー: Dreamweaver — admin @ 1:15 AM

■方法

  1. Cドライブ>Program Files>Macromedia>Dreamweaver MX>Configuration>DocumentTypes>MMDocumentTypes.xmlを書き換える
  2. ただし上記のディレクトリはWindows XPの場合であり、他のOSでは若干異なる可能性もあるのでご了承。。。
3行目を
<documenttype id="HTML" internaltype="HTML" winfileextension="html,htm,shtml,shtm,stm,lasso,xhtml" macfileextension="html,htm,shtml,shtm,lasso,xhtml" file="Default.html" writebyteordermark="false">

と書き換える。要は、「htmの前にhtmlを配置し並び替える」ということ

■おまけ

初期設定がhtmってどういうこと!?しかもアプリケーションの環境設定で変えられないって欠陥じゃね!?とかツッコミいれてみたり。。。

2007年8月19日

2007年08月19日

カテゴリー: 日記 — admin @ 10:09 PM

■世間のお盆休み事情

が気になって下のようなアンケートを実施してみた。

ちなみに筆者にはお盆休みなんてない。寂しくもあるが趣味も仕事も大体同じである筆者には休日も仕事もあまり大差は無い。

しかしまぁリフレッシュというのは人生には大切な一時なのであろう。

今の自分に安らぎという時間が無いのは欠点の一つであろうか。しかし休日に一人でいると何故か切なくなりませんかね?筆者はコレが非常に嫌い。とはいっても団体行動も嫌い(困)。まぁ下記を参考にしてみてくださいな。

2007年8月19日

$_GETと$_POSTのに格納された文字の自動エスケープ

カテゴリー: PHP — admin @ 8:25 PM

■magic_quotes_gpcとは

php.iniの設定に「magic_quotes_gpc=On」と書き足せば’(シングルクォーテーション)、”(ダブルクォーテーション)、\(バックスラッシュ) 、NULLを自動的にエスケープ処理してくれる設定(ディレクティブ)。

■重要

  • エスケープの意義とは「ユーザーからの悪意ある(害のある)入力に対する、無害化の処理」。(ちなみに不十分であった場合、データの漏洩などに繋がり危険である)
  • SQLインジェクションなどには上記の対策だけでは不足である

■エスケープ処理を取り除く時(magic_quotes_gpcがonになっていた場合など)

PHPの関数、stripslashes()を使用すれば自動エスケープされる前の文字列に戻せる

<?php
$before_str = 'test\'s test';
$after_str = stripslashes($before_str);
echo $after_str;//test's test
?>

■(発展)SQLインジェクションに対抗するために

  • PDO::quoteメソッドを使用する
  • mysql_escape_stringを使用する
  • プレイスホルダを使用する

上記、どれかの処理をして頂ければ基本OKですが、忘れた場合SQLインジェクションの標的となります。3番目が最も忘れにくい(イージーミスを起こしにくい)方法といえるかもしれません

詳細については改めて後述いたします。

2007年8月18日

正規表現でURLを表現しよう

カテゴリー: コンピューター言語 — admin @ 10:17 PM

■表記法

(http://|https://)[a-zA-Z0-9./_\-]+

バックスラッシュ(\)と半角の¥(円マーク)は同義である

以上

■ちょっと解説

  • (http://|https://)はhttp://、もじくはhttps://に一致
  • [a-zA-Z0-9./_\-]は小文字のアルファベット、大文字、数字、ピリオド、\アンダーバー、ハイフンに一致
  • +は直前の項目が1回以上

2007年8月18日

正規表現でメールアドレスを表現しよう

カテゴリー: コンピューター言語 — admin @ 10:10 PM

■表記法

^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$

バックスラッシュ(\)と半角の¥(円マーク)は同義である

以上

■ちょっと解説

  • ^は(次の項目が)行の最初の文字である事を示す
  • []でくくると括弧の中のどれか一文字
  • \wは大文字小文字のアルファベット、数字、アンダーバーに一致。
  • \-は-(ハイフン)に一致
  • \.は.(ドット)に一致
  • +は直前の項目が1回以上

「+」記号をはじいちゃっててスミマセンー

2007年8月15日

Safari3.0.3バグmemo(1)

カテゴリー: ブラウザ — admin @ 4:35 PM

■前提

Windows版でのテストである

■ポップアップのバグ(?もしくは仕様?)

  • ポップアップしたウインドウから空のウインドウをひらこうとすると無反応である。
  • という事で前日に、こちらでダウンロード開始したAjax文字化け解析ツールはSafariでのポップアップモードは使用できないなぁ~でもその他のモードは動きます。
  • Safariの2では通常通り起動します。

2007年8月14日

Ajaxのレスポンス文字化け解析ツール…ダウンロード開始!

カテゴリー: JavaScript — admin @ 12:18 AM

Ajaxのレスポンス文字化け解析ツール作りましたの記事で使用したツールと基本的には同じものです。

■注意

  • このツールは自己責任において利用し、作者はこのツールの使用によって生じたいかなる損害についても責任をおいません。
  • ダウンロードして頂いたファイルをサイト上で公開しても構いません。(特に連絡等は頂かなくて結構です)
  • 一部の注意書きを除き、改変、再配布、商用利用は自由に行えます。
  • 不具合が生じた場合はこちらのサイトに御報告いただけると幸いです。

■ダウンロード

ダウンロード←クリックして下さい。

■使用方法

  • ダウンロードしたファイル「charset_tool.zip」を解凍します
  • 解凍するとフォルダの中に同じ名前のフォルダが出来る事があるので注意してください
  • ご使用のサーバーの適当なディレクトリにアップロードします
  • アップしたディレクトリのindex.htmlにアクセスして下さい
  • PHPファイルのリクエストはサーバーが対応していない場合は正しい検証が出来ません

■おまけ

  • Ajaxを使用しておりますので、Ajaxって何なのって人から、Ajax初心者まで勉強できるかと思います

2007年8月12日

Ajaxのレスポンス文字化け解析ツール作りました

カテゴリー: JavaScript — admin @ 6:47 PM

■ツール

手っ取り早く試してみて下さい。(ポップアップでウインドウが開きます)

※IE6 + xmlをリクエスト + リクエストするファイルの文字コードShift-JISまたはEUC-JP + 受け取る形式がresponseText、この組み合わせの場合、ブラウザがフリーズします。つまりこの組み合わせはIE6をフリーズさせる組み合わせでありサイトでは使用してはイケナイ組み合わせという事になります

元のHTMLファイルの文字コード指定

上記をクリックして下さい

■分析結果

サーバーについて
  • 静的コンテンツのリクエストについて、POSTの使用の可否はサーバーの設定に依存する
  • POSTが使えた場合でもWindows2000Firefox2の場合はContent-Lengthがセットされず(もしくはサーバーに必要なヘッダがつかず)411のエラーが返る事がある
推奨できる文字コードとリクエスト

あくまでも個人的な見解です。筆者のコレまでのテスト環境はIE6Firefox2、です。随時増やしていきます

  • もっとも良いのはXMLをreswponseXMLで受け取る場合です(全ての文字コードにおいて文字化けする事なく表示されました)
  • テキストで受け取る場合はUTF-8以外は全て文字化けしました
  • html、jsonの場合はUTF-8以外は全て文字化けしました
  • xhtmlの場合はUTF-8以外は全て文字化けしました(ただし、文字化けしない場合も過去にありドキュメント内の文字に依存している可能性もあり要調査)
  • PHPの場合はheader(“Content-Type: text/html;charset=●●●”);で指定すれば文字化けは防げるようだ。(php.iniの設定にもよる)
ブラウザの違いについて
  • responseTextでXMLを受け取る場合、FirefoxではXMLのエンコード形式を解析しているようであり文字化けはしなかったが、IEではUTF-8以外を受け取ると文字化けしフリーズしてしまった
  • 文字化けする組み合わせの場合、IE6はフリーズする事があるようだ

■おまけ

サーバー、ブラウザの環境に依存するものなので皆さんが各自のサーバーで確かめられるダウンロード版を制作中です。

次ページへ »