2009-09-04 5 views
5

データを取得するJSPページがあり、シングルクォーテーションまたはダブルクォートがテキスト内にある場合は、このシンボルとして表示されます。シングルクォーテーションとダブルクォートをシンボルとして表示する

JSPコード:

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>General</title> 
    </head> 
    <body> 
     <h1> <%= order.getDescription %> </h1> 
    </body> 
</html> 

例:順序の説明は、次のようになります

"20から4" ×6" ウィジェット」

が、私はこれを取得しています、

「20 - 4 x 6ウィジェット」

注:私はdatに変更を加えることができません根絶する。

[EDIT]

私は文字をエスケープするコモンズ-LANG-2.4.jarを使用し、これらは私に迷惑を与える主要な文字です:

  1. &#145 - > ‘
  2. &#146 - > ’
  3. &#147 - > “
  4. &#148 - > ”
  5. &#150 - > –

私はいくつかの形式は私に問題を与えるだろう、しかし、私はちょうどのために文字に置き換えたのでは必ず他の文字です一時的な修正と私は現在、以下の提案をテストしています。

[SOLUTION FOR CODE]

それを行うにはこれはおそらくない最良の方法それは仕事が行われました。以下のコードは、データがデータベースから取得された後のバッキングBeanにあります。

description = StringEscapeUtils.escapeHtml(description); 

description = description.replaceAll("&#145;", "&quot;"); 
description = description.replaceAll("&#146;", "&quot;"); 
description = description.replaceAll("&#147;", "&quot;"); 
description = description.replaceAll("&#148;", "&quot;"); 
description = description.replaceAll("&#150;", "-"); 

description = StringEscapeUtils.unescapeHtml(description); 

答えて

1

これらは多分あなたのデータベースの標準ではない文字です...おそらくまっすぐな上下のものではなく方向性の引用符ですか?

データベース内のデータを変更できないため、これを処理する簡単な方法は、置換または正規表現を使用して、「不良」文字を正しく表示する文字と置き換えることです。

+0

これは正確な答えではありませんが、私の解決策につながります。 –

0

0094は、二重引用符です。大部分の文字U + 0094、だその4 ”×6 ”

8

:のように表示さ&rdquo;&#x94、:ストレート引用ダブル、またはカーリー二重引用符のためのHTMLエンティティと交換する方法を書きます使用されていない制御コード。 ISO-8859-1を使用して実際にWindowsコードページ1252(西欧言語)にあるバイトをデコードすると、通常はこの範囲の文字を取得します。それらは同様のエンコーディングであり、しばしば混乱しますが、0x80-0x9Fの範囲のシンボルは異なります。Windows cp1252では、スマート・クォートのようなものをいくつか使用しています。これはおそらくここで期待していたものです:ダブル・クローズ・クォート( "、U + 201D右ダブルクォーテーション・マーク)。

ウェブページがISO-8859-1であると言われると、ほとんどのWebブラウザでは実際には代わりにcp1252が使用され、見積もりがレンダリングされるという混乱があります。これはおそらくマークアップ側の問題ではありません。

おそらく、CP1252を含むデータベースと、ISO-8859-1を使用してそのバイトを文字列に変換するデータアクセスレイヤーがあります。これはおそらくこれがサーバーのデフォルトのエンコードであるためです。理想的には、Unicode文字列をネイティブに格納するようにデータベースを構成することをお勧めしますが、できない場合は、ISO-8859-1の代わりにCP1252エンコーディングを使用するようにデータベースコネクタを設定する方法が必要です。どのようにこれを行うかは、接続先と接続先によって異なります。プロパティを設定するか、接続文字列にパラメータを含める必要があります。

あなたは左が手動でデータベースから取得するすべての文字列値を越えるとで符号化することにより、バック彼らがどうあるべきかにそれらをトランスコードすることがある唯一の事について、あなたのデータ層とことを行うことができない場合ISO-8859-1エンコーディング、続いてCP1252でデコードします。これは本当の苦痛ですが、最後の手段としてはうまくいくでしょう。

[横書き:二重引用符を二重引用符で囲むと、インチを表すには不適切な文字になります。 "(Unicode U + 2033 DOUBLE PRIME)が最適ですが、従来のエンコーディングに限定されていれば、まっすぐな"二重引用符があります。]

+0

あなたの診断は少し外れていると思います。彼は文字列に正しいUnicodeデータを持っていますが、それはCp1252にエンコードされますが、メタデータごとにUTF-8を使用してデコードされます。 – McDowell

+0

それは私の即時の反応でしたが、実際には起こっているとは思わない。 UTF-8ページに唯一の0x94バイトなどの無効なシーケンスを含めると、ほとんどのブラウザは質問に投稿された実際の制御文字ではなく '?'や ' 'などの置換文字を提供します。もちろん、これらの種類の文字はここに貼り付ける前に簡単に再度乱雑になることがあるので、これらのような質問では常にちょっと難しいです... – bobince

+0

ああ、はい、あなたは正しいです。私は断る。 – McDowell

0

0094として指摘されているように、ストレートダブルクォートではありません。ことが異なる引用符を使用しての問題はあるが、0094はほとんどのフォントでは使用できません - 。。only some east asian fonts seem to have this character実際には、CANCEL control character categoryに落ちる文字ではなく、initial quoteまたはfinal quote文字カテゴリがある

それit is present in the Latin-1 supplement Unicodeブロックですが、この文字を扱うフィルタ(入力または出力)を指定することもできます。

入力フィルタは、アプリケーションが格納する文字のホワイトリストを指定するだけで、明らかに表示をサポートします。

出力フィルタは、基本的に、問題を引き起こすUnicode文字をより良いバリアントに置き換えます。

関連する問題