お問い合わせ

tel:0570-046-503

営業時間 10:00~17:00(定休日:土日祝日)

楽天スマートフォン用商品説明でタグ閉じチェックをする

   2015/08/04

以前の記事の中で、スマートフォン用の商品説明には制約があると書きました。

制約の中の一部で、

タグの閉じ忘れに対して厳密なチェックがある。

とあります。


HTMLを記述しているとついついタグの閉じ忘れがあるのですが、

CSVファイルをアップロードをしてエラーメッセージによって初めて気づくこと

が多くあります。


そこで今回は、特定のブロックごとに、タグの閉じ忘れが無いかどうか

チェックするコードをご紹介いたします。


C#でのコードになります。

        private bool SgmlReader(string html, bool upper, bool formatted)
        {
            //親要素が無いと、怒られるので、無い場合は追加
            if (html.IndexOf("<html") < 0)
            {
                html = "<html>" + html + "</html>";
            }
            try
            {

                //htmlの記述チェック
                string CRLF = System.Environment.NewLine;
                string ERROR_MESSAGE = "行:{0} カラム:{1} " + CRLF + "{2}";

                XmlUrlResolver resolver = new XmlUrlResolver();

                XmlReaderSettings settings = new XmlReaderSettings();
                settings.DtdProcessing = DtdProcessing.Parse;
                settings.XmlResolver = resolver;
                settings.ValidationType = ValidationType.None;//ValidationType.None;//ValidationType.DTD;
                settings.ValidationEventHandler += delegate(object sender, ValidationEventArgs e)
                {
                    throw e.Exception;
                };

                Stream stream = new MemoryStream(Encoding.Unicode.GetBytes(html));

                try
                {
                    using (XmlReader reader = XmlReader.Create(stream, settings))
                    {
                        while (reader.Read()) ;
                    }

                }
                catch (XmlException e)
                {
                    string s = String.Format(ERROR_MESSAGE, e.LineNumber, e.LinePosition, e.Message);
                    //return ("XMLエラー:" + s);
                    return false;
                }
                catch (XmlSchemaException e)
                {
                    string s = String.Format(ERROR_MESSAGE, e.LineNumber, e.LinePosition, e.Message);
                    //return ("DTDエラー:" + s);
                    return false;
                }
                catch (Exception e)
                {
                    //return ("エラー:" + e.ToString());
                    return false;
                }
            }
            catch (Exception e)
            {
                //return e.ToString();
                return false;
            }
            return true;
        }

このコードで注意しないといけないのは、<br/>のようなタグはエラーになってしまう点です。

拡張すれば、自己完結型のタグは無視するようにも出来そうですが、<br/>に限っては

使わないほうが良いです。


タグ閉じチェックとは別の話になりますが、<br/>で改行してしまうと、スマートフォンで

閲覧したときに画面サイズによっては不自然な改行となってしまいます。

なるべく<br/>は使わず、<p>文章~</p>

のように文章ごとに囲ってあげたほうが良いです。


話が少しそれましたが、上記のコードでほとんどのタグ閉じエラーは引っ掛けることが

出来ると思うので、参考にしてもらえれば幸いです。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)