ADC

エクスプレッションで文字セットを指定してください

NetScalerアプライアンスのポリシーインフラストラクチャは、ASCIIおよびUTF-8文字セットをサポートしています。デフォルトの文字セットは ASCII です。式を設定するトラフィックが ASCII 文字のみで構成されている場合は、式に文字セットを指定する必要はありません。アプライアンスでは、バイナリ文字を含むすべての文字列および文字リテラルを使用できます。ただし、UTF-8 文字セットでは、文字列と文字リテラルが有効な UTF-8 である必要があります。

CLIENT.TCP.PAYLOAD(100).CONTAINS("\xff\x02")

式では、式の特定の位置に SET_CHAR_SET () 関数を導入する必要があります。その後、指定された文字セットでデータ処理を実行する必要があります。<string>たとえば、HTTP.REQ.BODY (1000) .AFTER_REGEX (re/次の例/) .BEFORE_REGEX (re/前の例/) .CONTAINS_ANY (「ギリシャ語_ アルファベット」) という式に、パターンセット「Greek_Alphabet」に格納されている文字列がUTF-8の場合は、SET_CHAR_SET (UTF) を含める必要があります CONTAINS_ANY (「」) 関数の直前にある関数 (_8)。次のようになります。

HTTP.REQ.BODY(1000).AFTER_REGEX(re/following example/).BEFORE_REGEX(re/In the preceding example/).SET_CHAR_SET(UTF_8).CONTAINS_ANY("Greek_ alphabet")

SET_CHAR_SET () 関数は、その式の後のほうで文字セットを変更する別の SET_CHAR_SET () 関数によってオーバーライドされない限り、式で以降のすべての処理 (つまり、後続のすべての関数) に文字セットを設定します。<int>したがって、特定の単純な式に含まれるすべての関数が UTF-8 を対象としている場合は、テキストを識別する関数 (たとえば、HEADER (「<name>」) や BODY () 関数) の直後に SET_CHAR_SET (UTF_8) 関数を含めることができます。上の最初の段落に続く 2 番目の例では、AFTER_REGEX () 関数と BEFORE_REGEX () 関数に渡される ASCII 引数を UTF-8 文字列に変更すると、次のように BODY (1000) 関数の直後に SET_CHAR_SET (UTF_8) 関数を含めることができます。

HTTP.REQ.BODY(1000).SET_CHAR_SET(UTF_8).AFTER_REGEX(re/Bücher/).BEFORE_REGEX(re/Wörterbuch/).CONTAINS_ANY("Greek_alphabet")

UTF-8 文字セットは ASCII 文字セットのスーパーセットなので、文字セットを UTF-8 に変更しても、ASCII 文字セット用に設定された式は引き続き期待どおりに機能します。

文字セットが異なる複合表現

複合式で、式の 1 つのサブセットが ASCII 文字セットのデータを処理するように設定され、残りの式が UTF-8 文字セットのデータを処理するように構成されている場合、式を個別に評価する際には、個々の式に指定された文字セットが考慮されます。ただし、複合式を処理する場合、演算子を処理する直前に、アプライアンスは返された ASCII 値の文字セットを UTF-8 にプロモートします。たとえば、次の複合式では、最初の単純な式は ASCII 文字セットのデータを評価し、2 番目の単純な式は UTF-8 文字セットのデータを評価します。

HTTP.REQ.HEADER("MyHeader") == HTTP.REQ.BODY(10).SET_CHAR_SET(UTF_8)

ただし、複合式を処理する場合、「等しい」ブール演算子を評価する直前に、NetScalerアプライアンスはHTTP.REQ.HEADER(「MyHeader」)から返される値の文字セットをUTF-8にプロモートします。

次の例の最初の簡単な式は、ASCII 文字セットのデータを評価します。ただし、NetScalerアプライアンスが複合式を処理する場合、2つの単純な式の結果を連結する直前に、アプライアンスはHTTP.REQ.BODY (10) から返される値の文字セットをUTF-8にプロモートします。

HTTP.REQ.BODY(10) + HTTP.REQ.HEADER("MyHeader").SET_CHAR_SET(UTF_8)

そのため、複合式はデータを UTF-8 文字セットで返します。

トラフィックの文字セットに基づいて文字セットを指定します

トラフィックの特性に基づいて文字セットを UTF-8 に設定できます。評価対象のトラフィックの文字セットが UTF-8 かどうかわからない場合は、最初の式で UTF-8 トラフィックをチェックし、後続の式で文字セットを UTF-8 に設定する複合式を設定できます。以下は、リクエストの最初の 1000 バイトに UTF-8 文字列 Bücher が含まれているかどうかを確認する前に、最初にリクエストの Content-Type ヘッダーの「charset」の値が「UTF-8」であるかどうかをチェックする複合式の例です。

HTTP.REQ.HEADER("Content-Type").SET_TEXT_MODE(IGNORECASE).TYPECAST_NVLIST_T('=', '; ', '"').VALUE("charset").EQ("UTF-8") && HTTP.REQ.BODY(1000).SET_CHAR_SET(UTF_8).CONTAINS("Bücher")

評価対象のトラフィックの文字セットが UTF-8 であることが確実な場合は、例の 2 番目の式で十分です。

エクスプレッション内の文字リテラル、文字列リテラル

式の評価中、現在の文字セットが ASCII であっても、それぞれ一重引用符 (‘’) と引用符 (「」) で囲まれた文字リテラルと文字列リテラルは UTF-8 文字セットのリテラルと見なされます。特定の式で、関数が ASCII 文字セットの文字または文字列リテラルを操作していて、リテラルに非 ASCII 文字を含めると、エラーが返されます。

注記:

高度なポリシー表現の文字列リテラルは、ポリシー表現と同じ長さになりました。式は 1499 バイトまたは 8191 バイトの長さにすることができます。

16 進形式と 8 進形式の値

式を設定する場合、8 進数および 16 進数の形式で値を入力できます。ただし、16 進数または 8 進数の各バイトは UTF-8 バイトと見なされます。無効な UTF-8 バイトは、値を手動で入力したか、クリップボードから貼り付けたかにかかわらずエラーになります。たとえば、「\ xce\ x20」は、「c8」の後に「20」を付けることはできないため、無効な UTF-8 文字です (マルチバイト UTF-8 文字列の各バイトには上位ビットが設定されている必要があります)。無効な UTF-8 文字のもう1つの例は、「\ xce\ xa9」です。これは、16 進文字が空白文字で区切られているためです。

UTF-8 文字列を返す関数

text>.XPATH and <text>.XPATH_JSON 関数だけが常に UTF-8 文字列を返します。次の MYSQL ルーチンは、プロトコル内のデータに応じて、どの文字セットを返すかを実行時に決定します。

  • MYSQL_CLIENT_T.USER
  • MYSQL_CLIENT_T.DATABASE
  • MYSQL_REQ_QUERY_T.COMMAND
  • MYSQL_REQ_QUERY_T.TEXT
  • MYSQL_REQ_QUERY_T.TEXT(<unsigned int>)
  • MYSQL_RES_ERROR_T.SQLSTATE
  • MYSQL_RES_ERROR_T.MESSAGE
  • MYSQL_RES_FIELD_T.CATALOG
  • MYSQL_RES_FIELD_T.DB
  • MYSQL_RES_FIELD_T.TABLE
  • MSQL_RES_FIELD_T.ORIGINAL_TABLE
  • MYSQL_RES_FIELD_T.NAME
  • MYSQL_RES_FIELD_T.ORIGINAL_NAME
  • MYSQL_RES_OK_T.MESSAGE
  • MYSQL_RES_ROW_T.TEXT_ELEM(<unsigned int>)

UTF-8 の端末接続設定

ターミナル接続(PuTTYなどを使用)を使用してNetScalerアプライアンスへの接続をセットアップする場合、データ転送用の文字セットをUTF-8に設定する必要があります。

高度なポリシー表現における最小関数と最大関数

高度なポリシー表現は、以下の最小関数と最大機能をサポートします。

  1. (<expression1>.max(<expression2>) -2 つの値の最大値を返します。
  2. (<expression1>.min(<expression2>) -2つの値の最小値を返します。
エクスプレッションで文字セットを指定してください