ひとりごと

翌日:[2008-10-29]  前日:[2008-10-27] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2008/10/28 (火)

・ HTML Tidy

HTMLのチェックは簡単にできるようになったのですが、直すのは相変わらず手作業です。うちのひとりごとコーナーのエントリーは現在のところ2,248件。今月分のデータに関しては気になるので直しましたが、過去のデータの手直しなんかやってられません(^_^)。

手直しで多いのが <img >→<img />、<li>hoge→<li>hoge</li> だとか、<p>の閉じ忘れとか。そういう感じの間違いはある程度 機械的にできるはずなのですが、勝手にやってくれるものはないかいなと思っていたところ、HTML Tidy というのがあるそうです。で、PHPからも簡単に使えるようになっていて、/usr/ports/lang/php5-extensions で make config して TIDY を有効にして portupgrade -f してやれば使えるようになりました。

ソースファイル(PHP) 実行結果
<?php
$html=<<<EOF
<html>
<p>間違ったTidyサンプル
<table border>
<tr><th>thで始めてtdで終る</td><td>trを忘れる</td>
</table>
<a href="http://hoge.fuga/?a=1&b=2">
&の扱い
<img src="hogehoge.jpg" align=right>
<img>の扱い
</a>
<br clear="all">
<muko>無効な要素</muko>
<blockquote>閉じ間違い</blockquot>
<centre>開始間違い</center>
<li>いきなりリスト
</html>
EOF;
$config = array(
// 'indent' => true,
'alt-text' => '###',
'output-xhtml' => true,
'wrap' => 200);
$tidy = new tidy;
$tidy->parseString($html,$config,'utf8');
$tidy->cleanRepair();

echo $tidy;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<p>間違ったTidyサンプル</p>
<table border="1">
<tr>
<th>thで始めてtdで終る</th>
<td>trを忘れる</td>
</tr>
</table>
<a href="http://hoge.fuga/?a=1&amp;b=2">&の扱い <img src="hogehoge.jpg" align="right" alt="###" /> <img>の扱い</a><br clear="all" />
無効な要素
<blockquote>閉じ間違い 開始間違い
<ul>
<li>いきなりリスト</li>
</ul>
</blockquote>
</body>
</html>

実行結果から読み取れる事項をいくつか

ということで、いろいろ試した限りでは元々のHTMLがそんなに派手に崩壊することもないみたいで、正しいHTMLが入力された場合には表示に差異はなさそうです。これを踏まえてひとりごとコーナーに実装してみたのが次の例。

$config = array(
//    'alt-text' => '###',
    'output-xhtml' => true,
    'indent' => true,
    'wrap' => 200
);
$tidy = new tidy;
$tidy->parseString($body,$config,'utf8');
$tidy->cleanRepair();
if (preg_match(':<body>\s*\n(.*)\n\s*</body>:s',$tidy,$m)) {
    $body=$m[1];
}

ひとりごとこーなーでは 記事の内容を PostgreSQL から取ってきて $body に格納したあと表示しているのですが、表示の前段で上記を挟み込むだけでHTMLの手直しができました。いやはやこれは簡単。実行時間がかかるのでは?と気になったのですが、測定してみたところその差は1/50秒ぐらいでしたので、自宅サーバで動かす分には特に問題はなさそうです。記事の作成にはWWWブラウザをフロントエンドに使ってるので、登録データを読み出す際にも同じような処理を追加。新しい記事については格納データが綺麗になるようにしました。

そもそも機械的に処理できる事項についてわざわざ表示段で修正する必要があるのかと問われると返答に困るのですが、まぁあれです、HTML Validatorで150個のエラーとか表示されたらカッコわるいぢゃないですか(笑)。

□ 関連記事

[つっこみ]

・ レンズ全員集合

なんだか短期間にいっぱい買いすぎてあっぷあっぷなので、ここらでちょっと整理しておきます。

タムロン レンズ ニコン レンズ
[タムロン組] 左から
(1) SP AF90mmF/2.8 Di MACRO1:1(272E)
(2) SP AF 17-50mm F/2.8 XR Di II LD Aspherical [IF](A16NII)
[ニコン組] 左から
(3) AF-S DX Zoom-Nikkor ED 18-55mm F3.5-5.6G II
(4) AF-S DX VR Zoom-Nikkor ED 55-200mm F4-5.6G(IF)
(5) Ai AF Nikkor 50mm F1.4D
(6) AF-S DX NIKKOR 18-55mm F3.5-5.6G VR
(7) AF-S VR Zoom-Nikkor ED 70-300mm F4.5-5.6G(IF)

説明の都合上、レンズに番号を振っています。D40買ってから半年も経ってないってのになんでこんなことになっちゃったのでしょうね? とても不思議です。

てことで順に使ってみた感想とか。

(1) SP AF90mmF/2.8 Di MACRO1:1(272E)
レンズ単体では初めて買ったものです。カメラの主目的が散財アイテムの撮影ですので、このレンズはいちばん使用頻度が高いです(笑)。このレンズは被写体までの距離が短くなるとレンズが伸びるので近くのブツを撮るときは IF の方が便利かな~と思うのですが、ニコンのやつは スゴい値段 なので、タムロンで十分です。というか、すごく綺麗に写るので買ってよかった度 No.1 です。
(2) SP AF 17-50mm F/2.8 XR Di II LD Aspherical [IF](A16NII)
焦点距離17-50mmでF2.8固定の便利なレンズ。D90のひずみ補正でオートが使えないのが難点。普通のズームレンズと違って望遠側でも暗くならないので、室内ですごく扱いやすいです。が、このレンズはなぜかオートフォーカスでピントがうまく合わないときが多いのです。ネットのレビューを見ていると「前ピン」「後ピン」などピントが合う位置が必ずずれる症状を訴えてる方もいますが、うちの場合はそうじゃなくて「合うときと合わないときがある」って感じ。一度マニュアルフォーカスに切り替えてピントリングを動かしてからオートフォーカスさせるとピントが合ったりします。だからレンズのスペックとしては使いやすいのだけれど実際には使いにくい。というか撮りなおしがきく場面以外では使えないので最近は眠りについてます。
(3) AF-S DX Zoom-Nikkor ED 18-55mm F3.5-5.6G II
(4) AF-S DX VR Zoom-Nikkor ED 55-200mm F4-5.6G(IF)
この2本はD40ダブルズームキットを買ったときに付いてたものです。値段が安いし写りも良いのでD40の標準レンズとしてすごく良いと思います。あと特筆すべきなのはレンズ自体の軽さ。18-55が205gで55-200が335gです。ニコンには一本で18-200をまかなえるレンズもあるのですが、これって 560g もあるので、18-55と55-200合わせた重量よりも重いのです(笑)。
(5) Ai AF Nikkor 50mm F1.4D
唯一中古で買った単焦点のレンズ。ホントは35mmぐらいが欲しいのですが、ニコンでは明るい単焦点レンズは50mmしか無いので。いやはや単焦点レンズってホント綺麗に写りますね。中古で外見はあんまり美しくないのに写りはすばらしいのでびっくりです。上のタムロンの絵はこれで撮ってます。
水族館とかだと便利かな~と思うのですが、室内だとちょっと長いですし屋外だとべつに明るいのはいらないしズームレンズの方が便利だしで残念ながらあんまり使う機会がないです。てゆーか標準ズームと望遠ズームの2本しかバッグに入らないので持ち出す機会もあんまりないという(^_^)。でも単焦点の良さを理解できた点で買ってよかったです。
(6) AF-S DX NIKKOR 18-55mm F3.5-5.6G VR
タムロンの標準レンズをやめて使うことにした標準ズームレンズ。D60のキットレンズになっているもので、(1)のVR版という感じ。結構シャープに写るのですが、(7)の写りに比べると見劣りするような。ただ、もう1つ上のグレードになると価格が倍増しちゃうので、しばらくはこのレンズを使う予定です。
(7) AF-S VR Zoom-Nikkor ED 70-300mm F4.5-5.6G(IF)
運動会用に買った300mmレンズ。ただ長いだけかと思っていたのですが、シャープさ・AFの速さと正確さ・VRの効き・重さ(笑)等 どれをとっても55-200mmとは比較になりません。ホントこの写りは感動ものです。ここに並んでる中で一番高価なだけはあります。

という感じ。最近は (6)と(7)がカメラバッグに入ってることが多いです。おうちでよく使うのは(1)と(5)。D40に付いてたキットレンズを除けばすべて性格が違うレンズですが、もう他の性格のレンズは必要ないので、次に買うとしたら 現在アンバランスな18-55VRに代わるレンズかな。18-105mm VR なんかが良いらしいのですが、まだ価格は高めですね。3万円台におちてきたら買い時かな~と思います。

[つっこみ]
10/28( 通りすがりさん )
タムロン組 左右逆でっせ~
TOKINAのAT-X165買っちまいましただ。
NIKON 18-105mm VR
NIKON 70-300mm VR
あとはAiレンズを少々…
私もはまりつつあります、レンズ沼
10/28( たかたに )
あわわ、ホントですね(^_^)。こっそり直しておきました。
レンズはニコン・タムロン・シグマしか知らなかったのですが、TOKINAというのもあるのですね。でどんなんかな〜と見てみたらF2.8の16-50mm!! あぅ〜いいなー。いやいや、また増えちゃったらアレなので見なかったことにしよう(笑)。
[つっこみ]

翌日:[2008-10-29]  前日:[2008-10-27] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)