Highcharts でチャートのタイトル、サブタイトル、シリーズ名などをエンコードするための信頼できる機能が必要です。通常の HTML エンコーディング機能は動作しません。
クライアント側に文字列がある場合、今のところ単純に置き換えることに<
し<
ました:
function highchartsEncode(s) {
return s.replace(/</g, "<");
}
ASP.Net MVC ビューでチャートを作成するときは、次を使用します。
string HighchartsEncode(string s)
{
return HttpUtility.JavaScriptStringEncode(s).Replace(@"\u003c", "<");
}
ただし、Highcharts の文字列をエンコードして表示する方法がわからず<
、これが気になります (html エンティティの使用頻度をグラフ化したいと想像してください)。
バックグラウンド
Highchartsのラベルと文字列の書式設定のヘルプでは、次のことがわかります。
ハイチャートのテキストとラベルは HTML で提供されますが、HTML は SVG で解析およびレンダリングされるため、サブセットのみがサポートされます。次のタブがサポートされています:
<b>, <strong>, <i>, <em>, <br/>, <span>
. スパンは style 属性でスタイル設定できますが、SVG と共有されるテキスト関連の CSS のみが処理されます。Highcharts でテキストが処理されるほとんどの場所では、useHTML というオプションも後に続きます。これが true の場合、テキストはチャートの上に HTML として配置されます。これにより、完全な HTML サポートが可能になり、ラベルに画像を追加したり、ツールチップに表などを追加したい場合に適しています。欠点は、常に他のすべての SVG コンテンツの上に配置されることです。エクスポートされたチャートでは同じようにレンダリングされません。HTML を使用すると、双方向テキストに関する古いブラウザのバグを回避することもできます。詳細については、国際化を参照してください。
では、useHTML を使用しない場合、任意の文字列をエンコードしてハイチャートにそのまま表示するにはどうすればよいでしょうか? Highcharts は、 などの一部のエンティティを処理するようです<
が、 などの他のエンティティは処理しない&
ようです。そのため、既存の HTML エンコーディング関数を使用してテキストを単純にエンコードすることはできません。
いくつかの異なるケースで何が起こるかを確認するためのいくつかのテストを次に示します: http://jsfiddle.net/franzo/2nRPS/
上記の改善案はありますか?