URLエンコードとURLデコード

URLエンコードとは「スペース以外を%HH形式に変換し、スペースを+に変換する」などの仕様については軽く流しておいて、実際にどう使うかメモしておく。ちなみにPHPではいつもアンダースコアを混ぜてしまいsyntax errorを出すのはお約束になっています。

PHPでURLエンコード

rawurlencode( $uri );

PHPでURLデコード

rawurldecode( $uri );

rawが付かないものは、いつかどこかで不具合を起こすかもしれないので、つけておいたほうが無難です。
そして、エンコードの結果は大文字になっているので、他のスクリプトと連携させるときには注意すること。
ローカルはWindowsで動いているのに、リモートにアップしたとたん大文字小文字の違いで動かなくなったりなどよくあること。
ちなみに、Perlでよく使われる以下のようなURLデコードは小文字に変換されます。

PerlでURLエンコード

sub url_encode( $ ){
	my $str = shift;
	$str =~ s/([^\w ])/'%'. unpack( 'H2', $1 )/eg;
	$str =~ tr/ /+/;
	return $str;
}

PerlでURLデコード

sub url_decode( $ ){
	my $str = shift;
	$str =~ tr/+/ /;
	$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack( 'H2', $1 )/eg;
	return $str;
}

この場合に問題になるのはエンコードのほうで、デコードはほとんど関係有りません。エンコードで大文字にするか小文字にするかは、どちらかに決めておいたほうがいいかもしれませんが、ブラウザで表示されるのは一般的に大文字なので、PerlのURLエンコードにはuc()の追加をお勧めします。つまり次のようになります。

PerlでURLエンコード

sub url_encode( $ ){
	my $str = shift;
	$str =~ s/([^\w ])/'%'. uc( unpack( 'H2', $1 ) )/eg;
	$str =~ tr/ /+/;
	return $str;
}

間違えてはいけないのは、RFC1738には、大文字と小文字の両方が表記されており、「大文字で無ければならない」のではなく、「大文字の方が何かと都合がよい」ということです。PHPと連携させなければ特に考えなくてもいいです。
packはコピペが多く、それほど使いこなせているわけでもないので、他に方法がありそうな気もしますが、見慣れたコードに関数を追加するという明瞭な方法をとることも可読性という意味では大事でしょう。Perlに可読性を求めるなといわれそうですが。

OOo Version.3公開

MicrosoftOfficeとほぼ互換があるオフィススイート、オープンオフィスのバージョンが3になりました。
個人的にはOfficeは2000までしか使っておらず、それ以降は基本的にOOoでの作業です。
動作が少々もたつきますが、MS高額を払っても全機能を使うわけでもないし、立派に機能しているといえるでしょう。
まぁ、よそとやり取りするときには困ったりしますが。

さて、3で何が変わったのかといいますと・・・
アイコン?
ほかは・・・何が違うんだろう。
微妙にツールバーに変化があったぐらいでしょうか。
官公庁での導入も始まっているとも聞きますので、新しい物好きにはお勧めかもしれません。

ゲームタイトルを追加しました

「航海世紀ボヤージュセンチュリーオンライン」の追加と、取得に失敗していたタイトルを数点修正しました。
21日にFOAが終了のようですね。
墨香の名前のときにベータですがちょっとだけやってました。
雰囲気はよかったのですが、狩ゲーなので寿命はこのようなものですか。

PHPの関数「mysql_insert_id()」について

データベースを利用していて、割と使用頻度の高い関数mysql_insert_id()
同時に書き込んだ場合、この値が狂うとこまるし、テーブルをロックしたほうがいいのかどうかを調べてみました。
PHP: mysql_insert_id – Manualによれば、セッションで管理されていて、MySQLのlast_insert_idと同じ機能だということです。
つまり、テーブルをロックする必要はないということでした。

サイトマップを出力するプラグイン

WordPressの理解を深めようと、プラグインを調べていました。
そういえば、データベースで構成されているんだから簡単にサイトマップが作れるはず。
ということで、Sitemap Generator Plugin for WordPressを発見しました。

プラグインのファイル(書庫)はwordpresのページよりダウンロードする。
 ↓
解凍したファイルをディレクトリ(sitemap-generator)ごと/wp-content/plugins/にコピーする。
 ↓
wordpressにログインし、設定からプラグインの使用を選択する。
 ↓
言語を日本語にして、サイトマップのアドレス(/sitemap.xml)を設定する。

あとはgoogle先生にサイトマップの通知を行えば、しばらくすると反映されるでしょう。

ユーザー名を改めました

いままでは、ほぼ家から出ない毎日でしたが、定期的に外出するようになりましたので、スレルールにのっとってヒキ板からの離脱となりました。
現在JavaScript(Ajax)で処理しているシステムをflash化するためにActionScriptの勉強を開始したということもあり、404@hikkyから」404@swfに変更しました。
FLASH板の皆様、質問スレに厄介になるかもしれませんが、そのときはよろしくお願いいたします。m(
_ _)m

PHPでExcelを読み書きする

PHPでEXCELを読み書きするには、

  • Spreadsheet_Excel_Writer
  • Spreadsheet_Excel_Reader

が便利です。
ドキュメントの使い方だけを載せているサイトは沢山ありますが、インストール方法を載せているサイトはぜんぜん無いので書いておきます。

WriteはPEARに登録されていますが、Readerは手動でインストールする必要があります。それにWriteの利用にはOLEのインストールも必要になります。WriterとOLEは共に開発版だったので、-fオプションをつけてインストールする必要があります。

pear install -f OLE
pear install -f Spreadsheet_Excel_Writer

次にReaderのインストールですが、SourceForgeで公開されているので、書庫を保存します。
必要なファイルはExcelフォルダとその中にある2つのファイル「reader.php」と「oleread.inc」です。
Excelのディレクトリごと、PEAR保存フォルダの「Spreadsheet」ディレクトリにコピーします。

本来はこれで仕えるはずですが、残念ながらそうは行きません。

reader.phpを編集してrequireするファイル名を変更します。31行目を削除またはコメントアウトして、1行追加してください。

//require_once 'Spreadsheet/Excel/Reader/OLERead.php';
require_once 'oleread.inc';

OLERead.phpは検索しても出てこないので、PEARに登録するときにこの名前にするつもりだったとか、開発環境ではこの名前になっているとか言う落ちでしょう。自分でもたまにやりますから。これでSpreadsheet_Excel_Readerが動くようになりました。このライブラリの使い方は別の機会に。
おまけ
Writerの解説ページ

Excelで読めるHTMLを書く

Webサービスなどから、Excelで読めるHTMLを出力する場合、
以下の2行をヘッダで出力すればいいのは有名な話。
Content-Type: application/vnd.ms-excel
Content-Disposition: attachment; filename="file.xls"

しかし、今回も同じ技を使おうと思って困ったことになった。
それは、改行が反映されない。
Officeは2000までしか持ってないので、他のバージョンはどうなのかわからないけれど、
MSのことなので、この仕様(不具合)は2007でも継承されているに違いない(かもしれない)。
tdセル内に<br>を書くと行が分離してしまう。
純粋にプレーンなtableを書くとこうなってしまうらしい。
仕方が無いので、ExcelでHTMLを出力させ、改行が反映できるHTMLファイルのテンプレートを作ることにした。
以下がそのコード

<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<style>
<!--tr
	{mso-height-source:auto;
	mso-ruby-visibility:none;}
br
	{mso-data-placement:same-cell;}
.style0
	{mso-number-format:General;
	text-align:general;
	vertical-align:bottom;
	white-space:nowrap;
	mso-rotate:0;
	mso-background-source:auto;
	mso-pattern:auto;
	color:windowtext;
	font-size:11.0pt;
	font-weight:400;
	font-style:normal;
	text-decoration:none;
	font-family:"MS Pゴシック";
	mso-generic-font-family:auto;
	mso-font-charset:128;
	border:none;
	mso-protection:locked visible;
	mso-style-name:標準;
	mso-style-id:0;}
td
	{mso-style-parent:style0;
	mso-ignore:padding;
	color:windowtext;
	font-size:11.0pt;
	font-weight:400;
	font-style:normal;
	text-decoration:none;
	font-family:"MS Pゴシック";
	mso-generic-font-family:auto;
	mso-font-charset:128;
	mso-number-format:General;
	text-align:general;
	vertical-align:bottom;
	border:none;
	mso-background-source:auto;
	mso-pattern:auto;
	mso-protection:locked visible;
	white-space:nowrap;
	mso-rotate:0;}
.xl24
	{mso-style-parent:style0;
	white-space:normal;}
-->
</style>
<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>Sheet1</x:Name>
    <x:WorksheetOptions>
     <x:Selected/>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
 </x:ExcelWorkbook>
</xml><![endif]-->
</head>
<body>
<table>
 <tr>
  <td class=xl24>あ<br>い</td>
 </tr>
</table>
</body>
</html>

tdタグのxl24というクラスがあることで改行が反映されるらしい。
表示が1行のみになってしまうが、データとしては問題ないらしい。
もう少し削れそうだけど、テーブルの中身さえスッキリすれば、テンプレートとして問題ないので今はここまで。
この方法はMSのExcel用のものなので、OpenOfficeOrgのCalcではやはり分離する。

データ取得元が不調なようです。

日報の皆様、いつもお疲れさまです。
さて、最近ずっと取得の不調が続いてます。
WCGから接続ブロックを食らったので(憶測ですが)データの取得元をにっぽー氏のXMLに切り替えたのですが、こちらでも調子が悪いようです。
さっき確認した中では、txtは正常そうでしたがxmlは空っぽでした。

最近何かと忙しく、かまう時間がなかなか取れずに申し訳ございません。
ただ、管理を放棄したわけではありませんので、首を長くしてお待ちいただければと思います。