1

MySQL データベース内の置換文字を扱っています...そこに残っていれば問題ありませんが、編集しようとしています。私のフォームでは、文字がクエスチョン マーク (�) が付いたひし形で表示されます。フォームを送信し、フォーム上のデータとデータ内のデータを比較して、変更されているかどうかを確認します。ここでの問題は、フォームを送信すると、置換文字が& #65533;に変わることです。これはhtmlエンティティと同等であるため、これが発生すると比較に失敗し、コードは文字列が変更されたと見なします-実際にはそうではありません. 私は、比較時に置換文字をデータベースから同等の html エンティティに変換するさまざまな方法を採用しようとしました。置換文字に - これは単に機能しません - しかし、両方とも失敗します。はい、私は html_entity_decode() と htmlspecialchars_decode() を試しました

私の質問は次のとおりです。置換文字が html エンティティにならないようにするにはどうすればよいですか?

4

2 に答える 2

2

HTML のエンコーディングを確認してください (例)

<meta http-equiv="Content-Type" content="text/html; charset=<your_charset>">

およびデータベース上 (MySQL など)

DEFAULT CHARACTER SET <your_charset> COLLATE <your_collate>

等しい必要があります。

于 2012-04-09T05:28:31.387 に答える
1

何らかの理由で、Webブラウザーは、10進数の数値HTMLエンティティとして�REPLACEMENTCHARACTER(U + FFFD)を送信しています&#65533;。おそらく、あなたはすでにそれをブラウザにそのように出力していますか?

ただし、入力にHTMLエンティティが含まれていると予想される場合、それらをHTMLとしてデータベースに保存したくない場合は、それらをデコードする必要があります。着信UTF-8エンコード文字列内の数値エンティティをデコードするには$str

$convmap = array (0, 0x10FFFF, 0, 0xFFFFFF);
$output = mb_decode_numericentity($str, $convmap, 'UTF-8');

このコードは実際に探している変換(デモ)を実行しますが、最初に数値HTMLエンティティが送信される理由を明確にする必要があります。

Unicodeを好むので、WebページにUTF-8を使用することをお勧めします。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

およびフォームの場合:

<form action="" method="post" accept-charset="utf-8">

幸運を。

于 2012-04-10T14:35:48.927 に答える