0

console.log に渡されると、console.log とまったく同じ出力が得られる 2 つの Javascript 文字列がありますが、SpringMVC を使用して HTTP POST 経由で Java Jetty ベースの REST API に渡すと、Jackson JSON 解析ライブラリがエラーをスローし、サーバーは 2 番目のステータス コードでは 400 ステータス コードを返しますが、最初のステータス コードでは返しません。

両方の文字列は、ブラウザーでtextAngularツールを使用して生成されます。HTML を編集するために [html/リッチ テキストの切り替え] ボタンをクリックすると、2 つの文字列の唯一の違いは、textAngular によってサニタイズされる前に、一方に「 」が含まれていることです。html にあり、もう一方には通常のスペース " " が含まれています。

<p>Howdy </p>

<p>Howdy&nbsp;</p>

2番目のものは失敗したものです。ただし、サーバーに渡される前の各文字列は textAngular によってサニタイズされるため、出力は同じように見えます。console.log からの文字列の出力のサニタイズされた両方のバージョンは次のとおりです。

<p>Howdy </p>

両方がエラーをスローするか、両方がパスするかのいずれかです。

console.log は、実際の文字列変数で独自のサニタイズを行っていますか? または、console.log が自動的に変換する 2 つの文字列の空白文字に使用される別の文字エンコーディングがありますか?

  1. textAngular からの出力文字列が空白文字に異なる文字エンコーディングを使用しているという私の予感を検証するにはどうすればよいでしょうか?
  2. 実際の問題を解決し、出力文字列が同じ文字エンコーディングを共有していることを確認するにはどうすればよいでしょうか。

更新: 文字列で次を使用してみました。

console.log(html.charCodeAt(8))

最初の文字列に対して 32 を返し、2 番目の文字列に対して 160 を返すため、実際にはバイナリ表現が異なっているように見えます。この特定の空間エンコーディングを別のエンコーディングに変換する独自のサニタイザーを作成できると思いますが、このような別の文字を使用した他のエッジケースがあるのではないかと心配しています。文字列全体を正しい文字エンコーディングに強制するより良い解決策があるかどうか疑問に思っています。

4

1 に答える 1

0

私の解決策は、投稿を送信する前に独自の消毒機能を追加することでした。

html.replace('\xa0', '&nbsp;');

ここで、'\xa0' は 160 の 16 進エンコーディング (改行なしスペース) です。これは、サーバーの JSON パーサーを満たしているようです。ただし、textAngular のサニタイザーに関連する文字エンコーディングの問題と、より包括的なソリューションの可能性があるかどうかを確認したいと思います。

于 2016-02-26T21:36:30.383 に答える