HTML をデータベースに保存できる CMS を構築しました。それはすべて非常に単純なことから始まりました。htmlspecialchars を使用して HTML をテキストエリアに表示し、フォームが壊れないようにしました。次に、html_specialchars_decode を使用して保存しました。誰かが入力する代わりに HTML をシステムに貼り付けるまで、すべて正常に動作しているように見えました。この時点では問題なく保存されていましたが、空白のほとんどが失われていたため、すべての美しいインデントを最初から行う必要がありました。
それを修正するために、utf-8 エンコーディングですべてを指定しようとしました。
PHPヘッダーにutf-8を指定しています
header('Content-Type: text/html; charset=utf-8');
HTML ページで utf-8 を指定しています
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
HTML形式でutf-8を指定する
<form accept-charset="utf-8"
次に、投稿された値を(基本的に)次のように読み取ります。
$Val = $_POST[$SafeFieldName];
私の理解では、PHP はすべてを utf-8 で行っていたので、この段階で gobbledegook が発生することに少し驚いています。
$Val = utf8_decode($Val);
したがって、この段階では、動作します。私は素敵なインデントをすべて失いますが、空白のすべてではありません. utf8 以外の文字が取り除かれているようです。奇妙なことに、私はChromeを使用していますが、Firefoxでは問題ないようです
私は今、自分を縛っているだけだと思います。エレガントな提案はありますか?ハッキングして機能させるのではなく、この問題の根底に到達する必要があります。