4

HTML およびテキスト データを未加工の形式でデータベース テーブルに保存していますが、正しく出力するのに少し問題があります。テーブルにそのまま格納されているサンプル データを次に示します。

<p>Professional Freelance PHP & MySQL developer based in Manchester.
<br />Providing an unbeatable service at a competitive price.</p>

このデータを出力するには、次のようにします。

echo $row['details'];

そして、これはデータを正しく出力しますが、W3Cバリデータチェックを行うと、次のように表示されます:

character "&" is the first character of a delimiter but occurred as data

だから私はhtmlemtitiesandを使ってみhtmlspecialcharsましたが、これはページにHMTLタグを出力するだけです。

これを行う正しい方法は何ですか?

4

4 に答える 4

10

&amp;の代わりに使用し&ます。

于 2013-06-15T21:21:37.640 に答える
5

あなたがしたいことは、php関数を使用することhtmlentities()です...
入力をhtmlエンティティに変換し、出力時にHTMLとして解釈され、そのHTMLの結果として出力されます...
例:

$mything = "<b>BOLD & BOLD</b>";
//normally would throw an error if not converted...
//lets convert!!
$mynewthing = htmlentities($mything);

今、$mynewthingあなたのデータベースに挿入するだけです!!

于 2013-06-15T21:28:35.890 に答える
2

htmlentitiesは基本的に のスーパーセットであり、htmlspecialcharsおよびhtmlspecialcharsも置き換えます。<>

実際、あなたがしようとしているのは、無効な HTML コードを修正することです。これにはアドホックな解決策が必要だと思います。

$row['details'] = preg_replace("/&(?![#0-9a-z]+;)/i", "&amp;", $row['details']);

someone&son;: (末尾に ) のような文字列では失敗するため、これは完全な解決策ではありません;が、少なくとも既存の HTML エンティティを壊すことはありません。

ただし、データの保存方法を決定する権限がある場合は、データベースに保存されている HTML コードが正しいことを確認してください。

于 2013-06-15T21:21:13.343 に答える
0

In my Projects I use XSLT Parser, so i had to change &nbsp; to &#160; (e.g.). But this is the safety way i found...

here is my code

$html = trim(addslashes(htmlspecialchars(
        html_entity_decode($_POST['html'], ENT_QUOTES, 'UTF-8'),
        ENT_QUOTES, 'UTF-8'
    )));

And when you read from DB, don't forget to use stripslashes();

$html = stripslashes($mysq_row['html']);
于 2013-06-15T21:30:22.003 に答える