0

なぜこれが起こっているのか考えていますか?

ここに画像の説明を入力してください

主にアポストロフィとハイフンで発生しているようです。これを修正できるかどうかアイデアはありますか?データベースからデータを取得し、次のようなページに印刷します。

<div class="block">
              <?=$details['agenda'] ?>
</div>
4

1 に答える 1

2

他のコメント投稿者が言及しているように、これは文字エンコードの問題です。運が良ければ、HTMLページを強制的にUTF-8でレンダリングすると、問題が解決します。

残念ながら、運が悪ければ、文字が間違ったエンコーディングでデータベースに保存されていることに気付くでしょう。あるいは、データベースがそれらを変換するかもしれません。または、文字エンコードデータがパスに沿って破壊された可能性があります。それらのキャラクターがどこでダメージを受けたかを事前に知る方法はありません。

このような問題を修正するために私が知っている最善の方法は、パスに沿ったすべてのステップでUTF-8コンテンツエンコーディングに従うように強制することです。たとえば、おそらく次のような手順を実行します。

  1. コンテンツ作成者は、「SmartQuotes」を含むドキュメントをMicrosoftWordで作成します
  2. コンテンツ作成者は、コンテンツ管理システムの編集ボックスにコピーアンドペーストします。
  3. コンテンツ管理システムはデータベースに保存します。
  4. データベースは、データをUnicodeで内部的に保存する場合としない場合があります。必ず使用してくださいnvarchar(またはデータベースでサポートされているUnicodeタイプを使用してください)。
  5. データベースからの読み取りでは、文字をスキャンする必要がある場合があります。

ただし、これを修正するのは非常に難しいです。昔、私は次のような「検出と修正」ルーチンを作成する習慣がありました。

$smartquotes = array("”", "“");
str_replace($smartquotes, '"', $mytext);

もちろん、あなたは問題が何であるかを知っています-私は私が修正しなければならなかった新しいキャラクターを発見し続けるでしょう。Microsoft Wordは、著作権、登録マーク、アポストロフィ、ハイフンなど、多くの珍しい文字を使用するのが好きです。夢中になるまで、この関数を何度も追加し続けていました。そのため、最近はコンテンツ配信パス全体を調べて、すべてをUTF-8ルールに強制的に従わせています。ほとんどの場合、それで解決するようです。

幸運を!

于 2012-08-17T18:55:28.723 に答える