当記事では、ワテが最近覚えたPHPやHTMLの豆知識を紹介したい。
では、本題に入ろう。
<table></table>の中に<tbody> 要素を入れる場合の注意事項
Mozilla Developer Networkによると、
<tbody> の許可された親要素は <table> 要素
まあ、これは分る。
<table></table>の中に<tbody></tbody>を入れておけば良いのだ。
ところが、
<tbody> は <caption> 要素、<colgroup> 要素、<thead> 要素または <tfoot> 要素の後に配置しなければなりません。
引用元 https://developer.mozilla.org/ja/docs/Web/HTML/Element/tbody
と説明されている。
つまり、これはエラーになる(下図)。<thead>などが無いからだ。
<table> <tbody> ... </tbody> </table>
これなら正常。
<table> <thead> ... </thead> <tbody> ... </tbody> </table>
さて、WordPressの場合には、簡単なテーブルを作成すると、一つ前に例にあげたテーブルのように、<thead>無しでいきなり<tbody>で始まるテーブルが作成される。
なので、HTMLの文法チェックをしてくれる有名なサービス
Check the markup (HTML, XHTML, …) of Web documents
に掛けると、エラーが出る。
対策としては、テーブルを作ったら、必ずテーブルヘッダーを作成する習慣を付けておくと良い。
でも中にはヘッダーが無いテーブルも作りたい場合があるので、根本解決にはならない。
そう言う場合時はどうするべきなのかな?
こんな小細工をすればいいのかな?
<table> <thead style="display:none;"></thead> <tbody> ... </tbody> </table>
分からん。
なお、本日(2019/1/28)の時点で最新のWordPress 5.0.3でもやはりtheadが無いのにtbodyのみのtableが生成されるようだ。
PHPでテキストファイルを配列に読み込むなど
PHPは、一時猛烈に勉強したのだが、ワテが使っているVisual Studio 2017 Community の環境でPHPを使う為には有料製品が必要になる。
だ。
一ケ月の無料お試し期間が切れると、デバッガーが使えなくなるけれども、実行する事は可能だ。またエディタのインテリセンスも使える。
と言う事でお試し期間が切れているので、デバッガーが使えないのでPHPプログラミングはあまりやらない。
でも、WordPressのカスタマイズなどの場合にPHPが必要なので、今日久しぶりに使ってみた。
PHPでファイルを読み込む処理はワテの場合、あまり経験がない。
file()関数 テキストファイルを配列に読み込む
ファイル全体を配列に読み込むには、file()関数を使えば良いみたい。
array file ( string $filename [, int $flags = 0 [, resource $context ]] )
引用元 http://php.net/manual/ja/function.file.php
例えばこんな感じか。
$lines = file($pathFileName, FILE_IGNORE_NEW_LINES |FILE_SKIP_EMPTY_LINES));
この二つのオプションを付けておくと空白行を除去出来た。
FILE_IGNORE_NEW_LINES 配列の各要素の最後に改行文字を追加しません。
FILE_SKIP_EMPTY_LINES 空行を読み飛ばします。
注意:
FILE_IGNORE_NEW_LINES を指定しない限り、 配列に取り込まれた各行は行末文字も含みます。 行末文字を取り除きたい場合には rtrim() を使用する必要があります。
引用元 http://php.net/manual/ja/function.file.php
例えば、こんなファイルの場合には、
文字列1[CR][LF] 文字列2[CR][LF] 文字列3[CR][LF] [EOF]
三つの文字列要素を持つ配列 $lines が出来る。
"文字列1" "文字列2" "文字列3"
もしFILE_IGNORE_NEW_LINESオプションを付けないと、配列データの中に[CR]が読み込まれるようで、空白行を除去出来なかった。
空白行を除去したうえで、一行の文字列に連結したい場合には、こんな感じか。
$lineJoin = implode('', file($pathFileName, FILE_IGNORE_NEW_LINES |FILE_SKIP_EMPTY_LINES));
readfile — ファイルを出力する
ファイルを読む別の関数として、
(PHP 4, PHP 5, PHP 7)
readfile — ファイルを出力する説明
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
引用元 http://php.net/manual/ja/function.file.php
と言うのも使ってみたが、これだとファイルを読み込んで標準出力に書き出すだけなので、空行を除去出来ないようだ。
それで冒頭のfile()を使ってみたら上手く行った。
ファイル関連のもう一つ別の関数もある。
file_get_contents — ファイルの内容を全て文字列に読み込む
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
file_get_contents — ファイルの内容を全て文字列に読み込む説明
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )
この関数は file() と似ていますが、 offset で指定した場所から開始し maxlen バイト分だけ ファイルの内容を文字列に読み込むという点が異なります。
失敗した場合、file_get_contents() は FALSE を返します。
引用元 http://php.net/manual/ja/function.file.php
offsetとmaxlenを指定出来る点が便利そうではあるが、今回のワテの用途では、空行を除去したかったのでこの関数は使わなかった。
また別の機会に使ってみるかな。
まとめ
PHPのデバッガーを使いたいのだが、マイクロソフト社純正のツールは無いのかなあ。
あるいはXamarinがマイクロソフト社に買収されて無料でVisual Studioに組み込まれたように、PHP Tools for Visual Studioの開発元を買収してこのツールも無料でVisual Studioに組み込んでくれると、ワテとしてはとっても嬉しい。
ワテもPHPの本を買ってみるかな。
30時間でPHPが覚えられるのか?
コメント