moファイルをFTPでアップするとき、アスキーモードで転送しませんでしたか?
念のため、バイナリーモードで再度アップしてみてはいかがでしょう。
一応、確認しましたがバイナリーモードでアップされていました。
日本語は問題なく表示はされています。
ApacheとかPHPとかデータベースにおいて文字コードの設定に
おかしい部分があるとか、もしくはテンプレートファイル中に
UTF-8とシフトJISが混在しているとかでしょうかね?
# サーバー等の各種環境が分からないので、何とも言えません。
可能であれば、そのうまくいかないページのURLを公開していただければ幸いです。
wordpress2.5 日本語版で試しました。
This Page Is Valid XHTML 1.0 Transitional!
となりました。
試したサイトはhttp://www.outbreak2000.com/です。
vicunaテンプレートを使用しているhttp://www.outbreak2000.com/katsusyo/では
This Page Is Valid XHTML 1.0 Strict!
となりました。
参考になれば。
katzeさん、shokun0803さん、アドバイスありがとうございます。
こちらがうまくいっていないページです。
http://www.ragard-jp.com/
不思議なことに右クリックでページのソースを表示し、W3C Markup Validationに
ソースをそのまま貼り付けると問題なくValidateされました。
vicunaを調べて、色々試してみます。
試行錯誤を繰り返し、無事解決できました。
原因はUTF-8にBOM(Byte Order Mark)が含まれているからでした。
解決方法
オリジナルテーマを作る際に使ったDreamweaverはデフォルトで
UTF-8になっており、それをUTF-8 without BOMにし、上書きしました。
この問題はWordPress本体ではなくテキストエディタのほうの問題でした。
みなさんのご協力ありがとうございました。
本家のフォーラムではよくある問題みたいなので、時間がある時に
日本語で記事にしたいと思います。
追記:海外のプラグインの中にもBOM問題があるみたいです。(ダウンロードしたプラグインをBOMなしで保存することにより解決ができます。)
そちらのサイトを Another HTML-lint gateway を用いてチェックしてみると、
The W3C Markup Validation Service においてエラー報告される行は、
サイドバーの「最近のコメント」部分で comment-85 が存在する行に
なるようですが、これは関係ありませんでしょうか。
推測ですが、そちらで使われているRecentComments系プラグイン等は、
コメントの概要を切り出すときに、多バイト文字を考慮せず1バイト単位で
切り出しているように思います。
その結果、最後の日本語文字(UTF-8ならばたいてい3バイト)が途中でちぎられて、
UTF-8に定義されていないバイト列がHTML文書中に残ってしまい、
バリデーションエラーとなっている可能性があります。
ということで、試しにRecentComments系プラグインをON/OFF、または
WP Multibyte PatchプラグインをON/OFFしてみてはいかがでしょう。
# 解決済みとの事ですが、念のため書かせていただきました。
@katzeさん
調べていただきありがとうございます。
おっしゃる通り、Recent Comments系のプラグインが原因で最後のValidationが
うまくいきませんでした。
Recent Comment系のプラグインをオフにすると問題はなくなったので
katzeさんが仰るとおり、日本語文字が途中で切られているのが
UTF-8に定義されていないバイト列として残り、それが原因となりエラーが出ていました。
まだ、解決には至っていませんがコメントを付けたユーザー名と記事のタイトル名
のみを表示させることによって、文章中の途切れを回避しようと思っています。
ソースを見てないので、プラグインなのかオリジナルの関数なのか、どのように文字を切ってるのかわかりませんが、私がやった例ですと
mb_substr
などに書き換えて、文字数に変更しました。
get-recent-commentsというプラグインを使っています。
mb_substrを入れることによって無事、解決することができました。
他の方々の参考のためにも書いておきます。
1493行目にある
if (strlen($text) > $length) {
を下のコードに変更します。
if (function_exists('mb_strimwidth')) {
$text = mb_strimwidth($text, 0, $chars_per_comment, '...', 'utf-8');
}
else {
みなさんのご協力ありがとうございました。
マルチバイトは本当に厄介ですね・・・。