ヒアドキュメントの中ではタブを使ってはいけない
PHPではまったので、記載しておきます。
PHPでXMLの処理についてPHP 開発者のための XML: 第 1 回 PHP での XML を 15 分で学ぶを参考に学習をしていたのですが、どうもヒアドキュメントを使用する箇所でパースエラーになり、うまくよみこめない。私の環境はOSX 10.5で、XAMPPもMAMPもローカルのApacheでも同様にパースエラーとなりました。 ヒアドキュメントができない。 - BIGLOBEなんでも相談室を見つけたので、文字コードと改行の問題かと思ったのですが、色々試しても解決しない。同様のエラーが出ていらっしゃる方がいたようでDo You PHP? - BBSに解決方法が記載されていました。
なぜこのようなパースエラーが生じていましたかというと、これは私が以下のように「Tab」を使用していたためです。 $here_document = <<<EOD <tr><td>ヒア文字列</td><td>$greeting\n</td></tr> EOD; 「Tab」を使用することによって、何故か空白が出来てしまう。このように解釈されてしまう。これが原因だったようです。
ということのようです。私が参考にしていたPHP 開発者のための XML: 第 1 回 PHP での XML を 15 分で学ぶのソースをコピーするとヒアドキュメンとの箇所にtabが入っていたようです。
<?php $xmlstr = <<<XML <books> <book> <title>Great American Novel</title> <characters> <character> <name>Cliff</name> <desc>really great guy</desc> </character> <character> <name>Lovely Woman</name> <desc>matchless beauty</desc> </character> <character> <name>Loyal Dog</name> <desc>sleepy</desc> </character> </characters> <plot> Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark at mailman. </plot> <success type="bestseller">4</success> <success type="bookclubs">9</success> </book> </books> XML; ?>
また、閉じタグの後ろに半角スペースが入っているのも、パースエラーになるようで、タブと半角スペースを削除して、次のように書き換えることで、無事にヒアドキュメンとが動作するようになりました。
<?php $xmlstr = <<<XML <books> <book> <title>Great American Novel</title> <characters> <character> <name>Cliff</name> <desc>really great guy</desc> </character> <character> <name>Lovely Woman</name> <desc>matchless beauty</desc> </character> <character> <name>Loyal Dog</name> <desc>sleepy</desc> </character> </characters> <plot> Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark at mailman. </plot> <success type="bestseller">4</success> <success type="bookclubs">9</success> </book> </books> XML; ?>
勉強にはなりましたが、こういう所で、はまるとつらいですね。