17

これが私が持っているコード行で、うまく機能します:

$content = htmlspecialchars($_POST['content'], ENT_QUOTES);

しかし、私がやりたいことは、特定の種類の HTML コードだけが変換されずに通過できるようにすることです。パスしたいHTMLコードのリストは次のとおりです。

<pre> </pre>
<b> </b>
<em> </em>
<u> </u>
<ul> </ul>
<li> </li>
<ol> </ol>

そして、考えながら、後で HTML を追加できるようにしたいと考えています。上記のHTMLコードの指定されたリストが変換されずに通過できるように、誰かが上記のコードを変更するのを手伝ってくれませんか?

4

6 に答える 6

14

私はあなたが事後にそれを行うことができると思います:

// $str is the result of htmlspecialchars()
preg_replace('#&lt;(/?(?:pre|b|em|u|ul|li|ol))&gt;#', '<\1>', $str);

のエンコードされたバージョンと<xx>、許可されたタグの制御されたセット内の</xx>場所を許可します。xx

于 2012-10-10T12:57:39.543 に答える
6

または、古いスタイルを使用できます。

$content = htmlspecialchars($_POST['content'], ENT_QUOTES);

$turned = array( '&lt;pre&gt;', '&lt;/pre&gt;', '&lt;b&gt;', '&lt;/b&gt;', '&lt;em&gt;', '&lt;/em&gt;', '&lt;u&gt;', '&lt;/u&gt;', '&lt;ul&gt;', '&lt;/ul&gt;', '&lt;li&gt;', '&lt;/li&gt;', '&lt;ol&gt;', '&lt;/ol&gt;' );
$turn_back = array( '<pre>', '</pre>', '<b>', '</b>', '<em>', '</em>', '<u>', '</u>', '<ul>', '</ul>', '<li>', '</li>', '<ol>', '</ol>' );

$content = str_replace( $turned, $turn_back, $content );
于 2012-10-10T12:59:34.143 に答える
2

Jack がこの問題に対処する方法を改善しました。<br>, <br/>およびアンカー タグのサポートを追加しました。このコードは、fisthref=&quot;...&quot;を置き換えて、この属性のみを使用できるようにします。

$str = preg_replace(
    array('#href=&quot;(.*)&quot;#', '#&lt;(/?(?:pre|a|b|br|em|u|ul|li|ol)(\shref=".*")?/?)&gt;#' ), 
    array( 'href="\1"', '<\1>' ), 
    $str
);
于 2015-02-13T17:24:49.497 に答える
-3

strip_tags を使用できます

$exceptionString = '<pre>,</pre>,<b>,</b>,<em>,</em>,<u>,</u>,<ul>,</ul>,<li>,</li>,<ol>,</ol>';

$content = strip_tags($_POST['content'],$exceptionString );
于 2012-10-10T13:02:03.950 に答える