WordPressのHTMLエスケープが変

 【WordPressの抜粋で改行が削除される一因はHTMLコードかもしれない】を書いた後にHTMLコードを見たら、ちょっと変だった。

文字実体参照(HTML entities)異常

 HTMLエスケープが変である。タグの左側だけ < となっていて、右側は > のままである。
 同じような記事である【WordPressの抜粋で改行が削除される原因は wp_posts テーブルの post_content】ではタグの右側がちゃんと > になっている。

正常なソースコード

 画像はプラウの機能でソースコードを見たものだが、実は記事の編集段階で異常が生じている。
 通常はビジュアルエディターで編集しているから気づかないのだが、コードエディターで表示して観ると、既に異常が生じていた。<br>が<BR>になっていることも異常だったらしい。

 どうしてこのようなことが起こったのだろうか?

 追記:
 この記事でも異常が再現した。

エンティティ異常
未分類
管理人のマストドンアカウントへのリンクなど

コメント

  1. ishii ishii より:

    そう言えば、【WordPressの抜粋で改行が削除される原因は wp_posts テーブルの post_content】は最初の文章が同じだからと【WordPressの抜粋で改行が削除される一因はHTMLコードかもしれない】をコピペしたような気がする。
    正常だったのはコピペだったからで、キーボードでタグを入力した場合に左側だけエスケープされる状態になるのか?

  2. いしい より:

    #WordPress #Mastodon #ActivityPub
    「タグの左側だけ < となっていて、右側は > のままである。」の所、元の記事は「タグの左側だけ &lt; となっていて、右側は > のままである。」
    「右側がちゃんと > になっている。」の所は、元の記事は「右側がちゃんと &gt; になっている。」

  3. ishii ishii より:

    この仕様は、ずっと以前から。次の記事のHTMLコードも同様。

    "2025.02.03"
    投稿コンテンツの ap_excerpt を ap_content に変更 | いしい@試行錯誤
    https://ishii00141.stars.ne.jp/20250203-1535-165/

    • ishii ishii より:

      #バグ ではなく #仕様 か…。左側だけエスケープしておけばタグと勘違いされなくなるけど…。コードが汚いよね。こういう所がWordPressの嫌な所。

      • ishii ishii より:

        #Gemini に尋ねた結果。

        はい、**WordPressのビジュアルエディターにおける** `<` のみを `&lt;` にエスケープする処理は、**合理的な処理**です。これは、記事の**コンテンツがHTMLとして解釈されるのを防ぎつつ、サーバー側の処理を簡略化する**ための、実用的な妥協案と言えます。
        
        ---
        
        ## 理由と合理性
        
        この処理の合理性は、以下の点に基づいています。
        
        1.  ### 誤ってHTMLとして解釈されるのを防ぐ
          **ビジュアルエディター**(TinyMCEなどのWYSIWYGエディター)で記事を作成する場合、ユーザーが入力したテキストは最終的に**記事のコンテンツ**として保存され、ブラウザに表示される際に**HTMLとして解釈**されます。
        
          ユーザーがコードスニペットとして `<div class="example">` と入力した場合、もしエスケープ処理がなければ、ブラウザはこの文字列を**HTMLタグの開始**と見なしてしまい、記事のレイアウトが崩れたり、予期せぬ挙動を引き起こしたりする可能性があります。
        
          * **`<` を `&lt;` に変換**することで、ブラウザはこれをHTMLタグの開始ではなく、単なる「より小さい」記号(リテラルなテキスト)として認識し、**そのまま画面に表示**します。これがエスケープ処理の主要な目的です。
        
        2.  ### `>` のエスケープが必須ではない(簡略化)
        
          HTMLにおいて、タグの開始を示す文字は**`<`** のみです。
        
          * **`>`**(`&gt;`)は、単独で存在する場合や、閉じられていないタグの中で使われた場合でも、通常はレイアウトを崩す原因にはなりません。
          * 例えば、ユーザーが「10 > 5」と入力した場合、`>` をエスケープしなくても、ブラウザはこれを問題なくテキストとして表示します。
          * **厳密には** `<` と `>` の両方をエスケープする方が正しい処理ですが、**実用上・機能上の目的**(HTMLタグとして解釈されることの防止)は **`<` のエスケープ**だけで達成できるため、サーバー側の処理負荷やコードの複雑さを軽減するために、**`>` のエスケープを省略している**と考えられます。
        
        3.  ### テキストエディターとの切り分け
        
          WordPressでは、ビジュアルエディター(WYSIWYG)と**テキストエディター**(HTML/コード編集)を切り替えることができます。
        
          * ユーザーが**ビジュアルエディター**でコードを入力している場合、そのコードは**表示用テキスト**として扱われることを意図しています。
          * 一方、HTMLタグを実際に挿入したい場合は、通常は**テキストエディター**に切り替えて入力することが推奨されます。
        
          この仕様は、**ビジュアルエディターの役割**(視覚的に記事コンテンツを作成し、HTMLとして誤解釈されるのを防ぐ)を明確にする上で、**合理的な設計**と言えます。
        
        ---
        
        ### 💡 補足:両方をエスケープする場合
        
        プログラミングやウェブ開発において、JSONやXMLのデータ処理など、より厳密なコンテキストでは、`<` (`&lt;`) と `>` (`&gt;`) の**両方をエスケープ**することが一般的です。WordPressのこの仕様は、**ブログ記事作成という用途**に特化し、最低限の安全性を確保しつつ、処理の簡略化を図った**実用重視の判断**であると理解できます。
        
        他にご質問はありますか?
タイトルとURLをコピーしました