WordPressのコメント欄の不具合仕様

"Wordpressのコメント欄にてしばしば、(>_<)という顔文字で囲まれた間の文章が消えるという問題が発生。<…>の中身がhtmlタグとして認識されるために起こる現象である。
"
WordPressのコメント内htmlを無効にしつつ自動でリンクを貼る方法 | 空絵ログ
http://meho.blog44.fc2.com/blog-entry-383.html

WordPressのコメント欄で貼り付けたコードにURLが膨れれている時にURLになってしまったり、タグが消えちゃったりのトラブルを繰り返してる。URLは http:// の後に半角スペースを追加して、タグ<>の場合は&lt;&gt;を使ってしのいでる。でも、顔文字に<>がある場合、確かに困る。タグは無効にした方が良さそう。

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

コメント

  1. ishii ishii より:

    次のコードをfunctions.phpに追加したら、これまでにエスケープした文字がエスケープされたままになってしまった。そりゃそうだ。

    remove_filter('comment_text', 'make_clickable', 9);
    add_filter( 'comment_text',   'escape_tags', 9);
    add_filter( 'comment_text_rss', 'escape_tags', 9);
    add_filter( 'comment_excerpt',  'escape_tags', 9);
    function escape_tags( $comment_content ) {
      if ( get_comment_type() == 'comment' ) {
        $comment_content = htmlspecialchars($comment_content, ENT_QUOTES);
      }
      return $comment_content;
    }

    • ishii ishii より:

      remove_filter('comment_text', 'make_clickable', 9);
      だけ、functions.phpに追加しておく。

    • ishii ishii より:

      このコードをそのままコピーするとエラーになる。それは''が違う文字に書き換えられているから。
      要注意!

      • ishii ishii より:

        ”ではなまく'を二つ並べたつもり。どうして、変な変換をするかな…。(―_―メ)

        • ishii ishii より:

          ’ではなく'ね。と、書いても、後ろの方も変換されちゃうだろうけど。

          • ishii ishii より:

            "WordPressには特定の記号を別の記号で自動的に置き換える機能が付いています。

            例えば ドット3つ '...' が 3点リーダー '…' に置き換わるなど

            この機能自体は便利かもしれないですが、そういう記号を置き換えずにそのまま表示したいこともあるかもしれません。

            そこでここではWordPressで記号の自動置換を無効化する方法について紹介します。
            "
            WordPressで記事内の記号が自動変換されるのを防ぐ方法 | Fukuro Press
            https://fukuro-press.com/wordpress-disable-wptexturize/

            ということで、次のコードを入れたみた。

            /** 記事本文で記号の置き換えを無効化 */
            remove_filter('the_content', 'wptexturize');
            /** 記事タイトルで記号置き換えを無効化 */
            remove_filter('the_title', 'wptexturize');
            /** 記事抜粋で記号置き換えを無効化 */
            remove_filter('the_excerpt', 'wptexturize');
            /** コメント本文で記号置き換えを無効化 */
            remove_filter('comment_text', 'wptexturize');

            • ishii ishii より:

              今度は大丈夫だった。

              • ishii ishii より:

                以前のコードもコピペできるようになって、コメント欄に書いた勝手に変換された後のコードと区別できるようになった。

                • ishii ishii より:

                  #Gemini に尋ねてみた。
                  私:‘はphpのコードなどで'の代わりに使えますか?
                  G:いいえ、PHPのコードで `‘` (タイプクォーテーション) を `'` (通常のシングルクォーテーション) の代わりに使うことはできません。

                  **理由:**

                  * **文字コードの違い:**
                    * `‘` と `'` は、見た目は似ていますが、異なる文字コードを持つ別の文字です。
                    * PHPは、`'` を文字列の開始と終了を示す記号として認識しますが、`‘` は認識しません。
                  * **シンタックスエラー:**
                    * PHPのコードで `‘` を使用すると、シンタックスエラーが発生し、プログラムが正常に動作しません。

                  **PHPで文字列を扱う場合:**

                  * **シングルクォーテーション (') :**
                    * シングルクォーテーションで囲まれた文字列は、変数の展開やエスケープシーケンスの解釈を行いません。
                    * 文字列内にシングルクォーテーションを含める場合は、`\'` のようにエスケープする必要があります。
                  * **ダブルクォーテーション (") :**
                    * ダブルクォーテーションで囲まれた文字列は、変数の展開やエスケープシーケンスの解釈を行います。
                    * 文字列内にダブルクォーテーションを含める場合は、`\"` のようにエスケープする必要があります。

                  **例:**

                  ```php
                  <?php
                  // 正しい例
                  $str1 = 'これはシングルクォーテーションで囲まれた文字列です。';
                  $str2 = "これはダブルクォーテーションで囲まれた文字列です。";

                  // エラーになる例
                  $str3 = ‘これはタイプクォーテーションで囲まれた文字列です。’; // シンタックスエラー
                  ?>
                  ```

                  **まとめ:**

                  PHPのコードでは、文字列を囲む記号として、必ず `'` (通常のシングルクォーテーション) または `"` (ダブルクォーテーション) を使用してください。`‘` (タイプクォーテーション) は使用できません。

                  • ishii ishii より:

                    これは深刻な問題だった。
                    #Mastodon に送られたコンテンツも
                    シングルクォーテーション (') が
                    タイプクォーテーション (‘)に変わっていた。
                    次のコードを入れた後なら大丈夫だった。

                    /** 記事本文で記号の置き換えを無効化 */
                    remove_filter('the_content', 'wptexturize');
                    /** 記事タイトルで記号置き換えを無効化 */
                    remove_filter('the_title', 'wptexturize');
                    /** 記事抜粋で記号置き換えを無効化 */
                    remove_filter('the_excerpt', 'wptexturize');
                    /** コメント本文で記号置き換えを無効化 */
                    remove_filter('comment_text', 'wptexturize');

  2. ishii ishii より:

    そう言えば、試してなかった。(>_<) ちゃんと試さねば。(>_<) 「ちゃんと試さねば」と書いたんだけど、表示されてないよね? これはそのままにしておく。

  3. ishii ishii より:

    アカウントを表記した際にドメインが省略されちゃうのも問題だな…。

    • ishii ishii より:

      preタグで囲むことにした。

      それから、
      #追加CSS に次のコードを追加して、 #WordPress 内だけでも改行されるようにした。

      /*pre内を改行させる*/
      pre {
      white-space: pre-wrap;
      }
      /*pre内を改行させる*/

      • ishii ishii より:

        "ソースコードを囲むときは<pre><code></code></pre>を使う、といろんな所で良く見ますが、preの目的はあくまでスペースや改行などをそのまま表示することです。
        "
        "<code></code>はソースコードを表すタグです。このタグ内に、htmlやcssの記述を書くことで、ソースコードを記述していることを伝えます。

        codeをpreで囲むのは、ソースコード自体が改行やスペースが入っていないと非常に見づらいからでして、そのままの形で表示するために、この二つのタグを併用することが多いのです。
        "
        preとcodeとソースコードとエスケープ処理とWordPressとGoogle Code Prettifyに加えてアスキーアートも【HTML】 | Katana-Neko
        https://katana-neko.com/20200902/pre-code/

  4. ishii-m より:

    @ishii
    (>_<) という顔文字のある返信のテスト。(>_<)

タイトルとURLをコピーしました