サポート » 使い方全般 » 記事保存時の特定範囲に「htmlentities()」を適用したい

  • 解決済 LVP8

    (@lvp8)


    記事の保存時に、「特定範囲だけ」をエスケープしてデータベースに格納することは可能でしょうか。具体的には、記事内の <pre> </pre> タグで囲った部分全てに適用させたいです。

    // 記事入力

    <pre>
    <div>
    <img src="aaa.jpg" />
    </div>
    </pre>

    // 希望する保存状態

    <pre>
    &lt;div&gt;
    &lt;img src="aaa.jpg" /&gt;
    &lt;/div&gt;
    </pre>

    出力時に esc_html() などを使うのとは勝手が違うので、行き詰っています。
    アドバイスいただければ幸いです。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • nobita

    (@nobita)

    こんにちは、
    php的なことでよろしければ、

    get_the_content();などを、$documentに置き換えてお考えください。
    変数に入ったhtmlをphpの正規表現で、preタグの内側を抽出して、HTML エンティティに置換する意図です
    htmlspecialcharsは、適宜置き換えてください。

    <?php
    
    $document =<<<DOC
    
    ああああああああ
    <pre>
    <head>
    	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
    	<meta http-equiv="content-script-type" content="text/javascript" />
    	<meta http-equiv="content-style-type" content="text/css" />
    	<meta name="author" content="" />
    	<meta name="keywords" content="" />
    	<meta name="description" content="" />
    	<link rev="made" href="mailto:" />
    	<link rel="stylesheet" href="" media="" />
    	<link rel="start" href="" />
    	<link rel="prev" href="" />
    	<link rel="next" href="" />
    	<link rel="help" href="" />
    	<title></title>
    </head>
    </pre>
    えええええええええええ
    <pre>
    <head>
    	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
    	<meta http-equiv="content-script-type" content="text/javascript" />
    	<meta http-equiv="content-style-type" content="text/css" />
    	<meta name="author" content="" />
    	<meta name="keywords" content="" />
    	<meta name="description" content="" />
    	<link rev="made" href="mailto:" />
    	<link rel="stylesheet" href="" media="" />
    	<link rel="start" href="" />
    	<link rel="prev" href="" />
    	<link rel="next" href="" />
    	<link rel="help" href="" />
    	<title></title>
    </head>
    </pre>
    
    DOC;
    
    $document = preg_replace_callback("|<pre>(.*?)</pre>|si",create_function('$matches','return "<pre>".htmlspecialchars($matches[1])."</pre>";'),$document);
    
    echo $document;

    トピック投稿者 LVP8

    (@lvp8)

    nobitaさん、回答ありがとうございます。

    preg_replace_callback()は目にしたことはあったのですが、使い方が分からなかったのでとても参考になりました。この質問とは違うのですが、お陰で悩みが一つ減りました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「記事保存時の特定範囲に「htmlentities()」を適用したい」には新たに返信することはできません。