Category: CGI、JavaScript
CGI開発をしてたら503が頻発するようになったので、ついにTelnetを使わざるをえない状況になりました。が、vistaはTelnetが初期設定のままでは使えません。これだけでも十分ファックな状態なんですが、私のパソコンはTelnetを使える状態にもなぜか出来ません。……まじでか。
vistaでtelnet出来るようにするには、まずコンパネ⇒「プログラムと機能」⇒「Windowsの機能の有効化または無効化」を開きます。しばらく待つとリストが表示されるので、その中から「Telnetクライアント」を探してチェックを入れます。それでOKをクリックすればいいはずなのですが、私の場合はここから5分くらい待たされます。で、待たされた揚句「エラーが発生しました」と表示されてやはりTelnetはできないのです。
(ーー;)
まあ他に方法はあるだろうと色々探してみたら、こんなのがありました。
フリーソフトです。
公式サイト:http://ja.poderosa.org/
ロゴの鳥がかわいいです。エジプト?
Telnet接続もできるはずなんですが、繋がらなかったので結局SSH接続とやらを使いました。設定も簡単だし(サーバーのアドレスとパスを入れるだけ)、良い感じ。これでサーバー操作の幅も広がるし、一件落着です。コマンドプロンプトのFTPよりも使いやすいかも。処理に1秒以上かかるようになったら、すぐに立ち上げてプロセスの状況を見てます。
vistaでtelnet出来るようにするには、まずコンパネ⇒「プログラムと機能」⇒「Windowsの機能の有効化または無効化」を開きます。しばらく待つとリストが表示されるので、その中から「Telnetクライアント」を探してチェックを入れます。それでOKをクリックすればいいはずなのですが、私の場合はここから5分くらい待たされます。で、待たされた揚句「エラーが発生しました」と表示されてやはりTelnetはできないのです。
(ーー;)
まあ他に方法はあるだろうと色々探してみたら、こんなのがありました。
フリーソフトです。
公式サイト:http://ja.poderosa.org/
ロゴの鳥がかわいいです。エジプト?
Telnet接続もできるはずなんですが、繋がらなかったので結局SSH接続とやらを使いました。設定も簡単だし(サーバーのアドレスとパスを入れるだけ)、良い感じ。これでサーバー操作の幅も広がるし、一件落着です。コマンドプロンプトのFTPよりも使いやすいかも。処理に1秒以上かかるようになったら、すぐに立ち上げてプロセスの状況を見てます。
06/24: CGIの文字コード変換「Jcode.pm」
Category: CGI、JavaScript
雨の日が続きますね。この季節は毎年体調不良に悩まされます。
早く冬が来ないかな……と早くも思い始めた私は、もちろん冬生まれです。
さて、今回はCGIで扱う変数の文字コードをUFT-8からShift-JISに変換する方法をメモしておきます。HTMLは基本的にUFT-8で書いているのですが、Shift-JISでエンコードされたCGIを使うと一部の文字だけ文字化けすることがあります(ページからCGIへ文字列を渡して処理するスクリプトの場合)。EUCでも同じ方法が使えます。まずは、文字化けの仕組みを考えてみましょう。
名前を入力すると、時間によって「こんにちは~さん」「こんばんは~さん」と挨拶を返すCGIがあるとします。
文字を渡すHTMLがShift-JISならば、文字化けは起こりません。

しかし、どうしても入力する側のHTMLはUFT-8にしたいんです!……ここからそんな人向けの説明です。ここで文字を渡す側のHTMLをShift-JISにしてしまえばサクッと解決します。さて私は頑固なので、渡す側の文字コードをUFT-8にしてみます。

文字化けが起こってしまいました。HTMLのmetaタグなどで宣言されている文字コードと、CGIから送られてきた文字コードが違っているので文字化けが起こります。今回は結果画面がShift-JISで宣言されているのに、「サトウ」という文字列がUFT-8であるために化けています。
それなら、結果画面の文字コードを変えればよいのでは……?
するとこうなります。

「サトウ」は表示されていますが、挨拶部分が化けてしまっています。Shift-JISでエンコードされているCGIは、生成した文字もShift-JISです。「こんにちは~さん」がShift-JISなのに、HTMLがUFT-8であるために化けています。
ここで注目したいのは、CGIは常にShift-JISの文字を吐き出しているということです。つまり、文字を渡す側のHTMLはUFT-8のままで、"文字列「サトウ」だけをShift-JISに変換"してしまえばいいのです。

簡単に言っちゃいましたが、それを実現してくれるライブラリが存在します。「Jcode.pm」です。「jcode.pl」には何度もお世話になってきましたが、こいつはそれの進化系なのだとか。
まずはダウンロード。
Jcode.pm
「インストール」という段落の、「Tarballを直接入手」というところから「Jcode-2.07.zip」をクリックしてダウンロードします。大量のファイルが入っていますが、使うのは「Jcode.pm」だけ。それを取り出して、CGIの実行スクリプトと同じ場所にアップロードしておきます。
次に、CGIの実行スクリプトをエディタで開きます。内部で「Jcode.pm」を使いますよ、という宣言をCGIの中でしなければなりません。ファイルの先頭「#!/usr/bin/perl」の直後あたりにこう記述してください。
準備はこれでおしまい。
次は変換する変数がどこにあるのかを探します。文字列を変数に格納している部分を捕まえられたらベストですが、複雑なスクリプトの場合は何が何だか分からないので(Pealはまだあんまり読めません…;)、HTMLに出力している部分を探します。こちらはタグがあるので見つけやすいと思います。たとえばこんな感じ。
見たところ、${aisatu}が挨拶部分で、${namae}が名前だろうな、とアタリをつけます。ターゲットにする変数を間違うと、さらに文字化けがひどくなったりするので、コピーしたファイルをいじることをお勧めします。
この行の直前に、以下のコードを貼り付けます。
UFT-8の$namaeを、Shift-JISに変換しています。
こうすることで、Shift-JISに変換された名前が出力されてきます。ちなみに、文字コードの部分には"jis"、"sjis"、"euc"、"ucs2"、"utf8"が使えます。必要に応じて書き換えてください。
CGIは奥が深いですね~。今はまだ改造程度ですが、いつかイチからスクリプトを組めるようになりたいものです。
早く冬が来ないかな……と早くも思い始めた私は、もちろん冬生まれです。
さて、今回はCGIで扱う変数の文字コードをUFT-8からShift-JISに変換する方法をメモしておきます。HTMLは基本的にUFT-8で書いているのですが、Shift-JISでエンコードされたCGIを使うと一部の文字だけ文字化けすることがあります(ページからCGIへ文字列を渡して処理するスクリプトの場合)。EUCでも同じ方法が使えます。まずは、文字化けの仕組みを考えてみましょう。
名前を入力すると、時間によって「こんにちは~さん」「こんばんは~さん」と挨拶を返すCGIがあるとします。
文字を渡すHTMLがShift-JISならば、文字化けは起こりません。

しかし、どうしても入力する側のHTMLはUFT-8にしたいんです!……ここからそんな人向けの説明です。ここで文字を渡す側のHTMLをShift-JISにしてしまえばサクッと解決します。さて私は頑固なので、渡す側の文字コードをUFT-8にしてみます。

文字化けが起こってしまいました。HTMLのmetaタグなどで宣言されている文字コードと、CGIから送られてきた文字コードが違っているので文字化けが起こります。今回は結果画面がShift-JISで宣言されているのに、「サトウ」という文字列がUFT-8であるために化けています。
それなら、結果画面の文字コードを変えればよいのでは……?
するとこうなります。

「サトウ」は表示されていますが、挨拶部分が化けてしまっています。Shift-JISでエンコードされているCGIは、生成した文字もShift-JISです。「こんにちは~さん」がShift-JISなのに、HTMLがUFT-8であるために化けています。
ここで注目したいのは、CGIは常にShift-JISの文字を吐き出しているということです。つまり、文字を渡す側のHTMLはUFT-8のままで、"文字列「サトウ」だけをShift-JISに変換"してしまえばいいのです。

簡単に言っちゃいましたが、それを実現してくれるライブラリが存在します。「Jcode.pm」です。「jcode.pl」には何度もお世話になってきましたが、こいつはそれの進化系なのだとか。
まずはダウンロード。
Jcode.pm
「インストール」という段落の、「Tarballを直接入手」というところから「Jcode-2.07.zip」をクリックしてダウンロードします。大量のファイルが入っていますが、使うのは「Jcode.pm」だけ。それを取り出して、CGIの実行スクリプトと同じ場所にアップロードしておきます。
次に、CGIの実行スクリプトをエディタで開きます。内部で「Jcode.pm」を使いますよ、という宣言をCGIの中でしなければなりません。ファイルの先頭「#!/usr/bin/perl」の直後あたりにこう記述してください。
use Jcode;
準備はこれでおしまい。
次は変換する変数がどこにあるのかを探します。文字列を変数に格納している部分を捕まえられたらベストですが、複雑なスクリプトの場合は何が何だか分からないので(Pealはまだあんまり読めません…;)、HTMLに出力している部分を探します。こちらはタグがあるので見つけやすいと思います。たとえばこんな感じ。
$result .= "${aisatu}くp class=\"red\">${namae}く/p>さん\n";
見たところ、${aisatu}が挨拶部分で、${namae}が名前だろうな、とアタリをつけます。ターゲットにする変数を間違うと、さらに文字化けがひどくなったりするので、コピーしたファイルをいじることをお勧めします。
この行の直前に、以下のコードを貼り付けます。
$namae = Jcode->new( $namae, "utf8")->sjis;
UFT-8の$namaeを、Shift-JISに変換しています。
こうすることで、Shift-JISに変換された名前が出力されてきます。ちなみに、文字コードの部分には"jis"、"sjis"、"euc"、"ucs2"、"utf8"が使えます。必要に応じて書き換えてください。
CGIは奥が深いですね~。今はまだ改造程度ですが、いつかイチからスクリプトを組めるようになりたいものです。
03/09: JSライブラリ Light Box2
Category: CGI、JavaScript
画像のポップアップによる拡大表示を同ウィンドウで、かつエフェクト付きで実現するライブラリ、LightBoxの紹介です。もっと多機能なライブラリも多く出回っていますが、シンプルながら使いやすいので愛用しています。
(使用例:SHEENA-PhotoAlbum)
Lightbox2
こちらからダウンロードできます。サイトのデザインがクール! CSSファイルや画像をカスタマイズすると、サイトの雰囲気や好みに合ったデザインにすることができます。
ただ、ひとつ問題点があります。以下の条件を全て満たす場合(実質的には1、2、4が満たされると)ポップアップした時の背景(デフォルトでは黒い部分)が切れてしまいます。ページ読み込み時のブラウザの高さ分しか黒くならないため、リンクがページの下の方にあると非常に不格好な状態になります。
1.DOCTYPE宣言でXHTMLを指定している
2.ポップアップするリンクがpositionプロパティのある要素内にある
3.ページはスクロールさせる必要がある(これは閲覧者の環境にもよりますが)
4.ブラウザがIE
なぜこうなるのか最初わからず、ずいぶん悩まされました。あれでもない、これでもないと条件を絞っていった結果、positionプロパティが原因だと判明。というかFireFoxできちんと表示されたので、IEのバグな気がします。。。
そういうわけで、お勧めですがXHTMLで書いている方は注意が必要みたいですね。
(使用例:SHEENA-PhotoAlbum)
Lightbox2
こちらからダウンロードできます。サイトのデザインがクール! CSSファイルや画像をカスタマイズすると、サイトの雰囲気や好みに合ったデザインにすることができます。
ただ、ひとつ問題点があります。以下の条件を全て満たす場合(実質的には1、2、4が満たされると)ポップアップした時の背景(デフォルトでは黒い部分)が切れてしまいます。ページ読み込み時のブラウザの高さ分しか黒くならないため、リンクがページの下の方にあると非常に不格好な状態になります。
1.DOCTYPE宣言でXHTMLを指定している
2.ポップアップするリンクがpositionプロパティのある要素内にある
3.ページはスクロールさせる必要がある(これは閲覧者の環境にもよりますが)
4.ブラウザがIE
なぜこうなるのか最初わからず、ずいぶん悩まされました。あれでもない、これでもないと条件を絞っていった結果、positionプロパティが原因だと判明。というかFireFoxできちんと表示されたので、IEのバグな気がします。。。
そういうわけで、お勧めですがXHTMLで書いている方は注意が必要みたいですね。
