• 解決済 ne-design

    (@ne-design)


    WordPressを日本語化した後、W3C Markup Validation Serviceを使うと、下のようなエラーが出ました。

    The error was: utf8 "\xE5" does not map to Unicode

    WordPress本家(wordpress.org)にあるWordPress2.5を使うとエラーはでなかったので.moファイルが原因ではないかと思います。

    問題となっている部分は予想ですが
    「 に含まれる投稿をすべて表示」

    「2008 年 4 月」

    例えば上のアーカイブの場合は2008と年の間にスペースがあるため、Validateされていないと考えています。この問題を解決するためにはどうしたらよろしいでしょうか?

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • moファイルをFTPでアップするとき、アスキーモードで転送しませんでしたか?
    念のため、バイナリーモードで再度アップしてみてはいかがでしょう。

    トピック投稿者 ne-design

    (@ne-design)

    一応、確認しましたがバイナリーモードでアップされていました。
    日本語は問題なく表示はされています。

    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!
    となりました。

    参考になれば。

    トピック投稿者 ne-design

    (@ne-design)

    katzeさん、shokun0803さん、アドバイスありがとうございます。

    こちらがうまくいっていないページです。
    http://www.ragard-jp.com/

    不思議なことに右クリックでページのソースを表示し、W3C Markup Validationに
    ソースをそのまま貼り付けると問題なくValidateされました。

    vicunaを調べて、色々試してみます。

    トピック投稿者 ne-design

    (@ne-design)

    試行錯誤を繰り返し、無事解決できました。
    原因は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してみてはいかがでしょう。

    # 解決済みとの事ですが、念のため書かせていただきました。

    トピック投稿者 ne-design

    (@ne-design)

    @katzeさん
    調べていただきありがとうございます。
    おっしゃる通り、Recent Comments系のプラグインが原因で最後のValidationが
    うまくいきませんでした。

    Recent Comment系のプラグインをオフにすると問題はなくなったので
    katzeさんが仰るとおり、日本語文字が途中で切られているのが
    UTF-8に定義されていないバイト列として残り、それが原因となりエラーが出ていました。

    まだ、解決には至っていませんがコメントを付けたユーザー名と記事のタイトル名
    のみを表示させることによって、文章中の途切れを回避しようと思っています。

    ソースを見てないので、プラグインなのかオリジナルの関数なのか、どのように文字を切ってるのかわかりませんが、私がやった例ですと
    mb_substr
    などに書き換えて、文字数に変更しました。

    トピック投稿者 ne-design

    (@ne-design)

    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 {

    みなさんのご協力ありがとうございました。
    マルチバイトは本当に厄介ですね・・・。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「WordPress日本語版をValidateすることができない」には新たに返信することはできません。