ADC

Geben Sie den Zeichensatz in Ausdrücken an

Die Policy-Infrastruktur auf der NetScaler-Appliance unterstützt ASCII- und UTF-8-Zeichensätze. Der Standard-Zeichensatz ist ASCII. Wenn der Verkehr, für den Sie einen Ausdruck konfigurieren, nur aus ASCII-Zeichen besteht, müssen Sie den Zeichensatz im Ausdruck nicht angeben. Die Appliance erlaubt alle Zeichenketten- und Zeichenliterale, die Binärzeichen enthalten. Die UTF-8-Zeichensätze erfordern jedoch weiterhin, dass die Zeichenketten- und Zeichenliterale gültig sind.

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

In einem Ausdruck muss die Funktion SET_CHAR_SET () an der Stelle im Ausdruck eingeführt werden, nach der die Datenverarbeitung im angegebenen Zeichensatz durchgeführt werden muss. For example, in the expression HTTP.REQ.BODY(1000).AFTER_REGEX(re/following example/).BEFORE_REGEX(re/In the preceding example/).CONTAINS_ANY(“Greek_ alphabet”), if the strings stored in the pattern set “Greek_alphabet” are in UTF-8, you must include the SET_CHAR_SET(UTF_8) function immediately before the CONTAINS_ANY(“<string>”) function, as follows:

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")

Die Funktion SET_CHAR_SET () legt den Zeichensatz für die gesamte Weiterverarbeitung (d. h. für alle nachfolgenden Funktionen) im Ausdruck fest, sofern er nicht später im Ausdruck durch eine andere SET_CHAR_SET () -Funktion überschrieben wird, die den Zeichensatz ändert. Therefore, if all the functions in a given simple expression are intended for UTF-8, you can include the SET_CHAR_SET(UTF_8) function immediately after functions that identify text (for example, the HEADER(“<name>”) or BODY(<int>) functions). Wenn im zweiten Beispiel, das auf den ersten Absatz oben folgt, die an die Funktionen AFTER_REGEX () und BEFORE_REGEX () übergebenen ASCII-Argumente in UTF-8-Zeichenketten geändert werden, können Sie die SET_CHAR_SET (UTF_8) -Funktion unmittelbar nach der BODY (1000) -Funktion wie folgt einschließen:

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

Der UTF-8-Zeichensatz ist ein Obersatz des ASCII-Zeichensatzes, sodass für den ASCII-Zeichensatz konfigurierte Ausdrücke weiterhin wie erwartet funktionieren, wenn Sie den Zeichensatz auf UTF-8 ändern.

Zusammengesetzte Ausdrücke mit unterschiedlichen Zeichensätzen

Wenn in einem zusammengesetzten Ausdruck eine Teilmenge von Ausdrücken so konfiguriert ist, dass sie mit Daten im ASCII-Zeichensatz funktioniert und die übrigen Ausdrücke so konfiguriert sind, dass sie mit Daten im UTF-8-Zeichensatz arbeiten, wird der für jeden einzelnen Ausdruck angegebene Zeichensatz berücksichtigt, wenn die Ausdrücke einzeln ausgewertet werden. Bei der Verarbeitung des zusammengesetzten Ausdrucks, unmittelbar vor der Verarbeitung der Operatoren, stuft die Appliance den Zeichensatz der zurückgegebenen ASCII-Werte jedoch auf UTF-8 um. Im folgenden zusammengesetzten Ausdruck wertet der erste einfache Ausdruck beispielsweise Daten im ASCII-Zeichensatz aus, während der zweite einfache Ausdruck Daten im UTF-8-Zeichensatz auswertet:

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

Bei der Verarbeitung des zusammengesetzten Ausdrucks stellt die NetScaler-Appliance jedoch unmittelbar vor der Auswertung des booleschen Operators „ist gleich“ den Zeichensatz des von HTTP.REQ.HEADER („myHeader“) zurückgegebenen Werts auf UTF-8 um.

Der erste einfache Ausdruck im folgenden Beispiel wertet Daten im ASCII-Zeichensatz aus. Wenn die NetScaler-Appliance jedoch den zusammengesetzten Ausdruck verarbeitet, unmittelbar bevor die Ergebnisse der beiden einfachen Ausdrücke miteinander verknüpft werden, stuft die Appliance den Zeichensatz des von HTTP.REQ.BODY (10) zurückgegebenen Werts auf UTF-8 um.

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

Daher gibt der zusammengesetzte Ausdruck Daten im UTF-8-Zeichensatz zurück.

Geben Sie den Zeichensatz auf der Grundlage des Zeichensatzes des Datenverkehrs an

Sie können den Zeichensatz basierend auf den Verkehrsmerkmalen auf UTF-8 setzen. Wenn Sie sich nicht sicher sind, ob der Zeichensatz des ausgewerteten Datenverkehrs UTF-8 ist, können Sie einen zusammengesetzten Ausdruck konfigurieren, bei dem der erste Ausdruck nach UTF-8-Verkehr sucht und nachfolgende Ausdrücke den Zeichensatz auf UTF-8 setzen. Es folgt ein Beispiel für einen zusammengesetzten Ausdruck, der zuerst den Wert von „charset“ im Content-Type-Header der Anfrage auf „UTF-8“ überprüft, bevor überprüft wird, ob die ersten 1000 Byte der Anfrage die UTF-8-Zeichenfolge Bücher enthalten:

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")

Wenn Sie sicher sind, dass der Zeichensatz des ausgewerteten Datenverkehrs UTF-8 ist, ist der zweite Ausdruck im Beispiel ausreichend.

Zeichen- und Zeichenkettenliterale in Ausdrücken

Bei der Auswertung von Ausdrücken gelten Zeichenliterale und Zeichenfolgenliterale, die in einfache Anführungszeichen (‘’) bzw. Anführungszeichen („“) eingeschlossen sind, als Literale im UTF-8-Zeichensatz, selbst wenn der aktuelle Zeichensatz ASCII ist. Wenn in einem bestimmten Ausdruck eine Funktion mit Zeichen- oder Zeichenkettenliteralen im ASCII-Zeichensatz arbeitet und Sie ein Nicht-ASCII-Zeichen in das Literal aufnehmen, wird ein Fehler zurückgegeben.

Hinweis:

Die Zeichenkettenliterale in fortgeschrittenen politischen Ausdrücken sind jetzt genauso lang wie der politische Ausdruck. Der Ausdruck darf 1499 Byte oder 8191 Byte lang sein.

Werte im Hexadezimal- und Oktalformat

Bei der Konfiguration eines Ausdrucks können Sie Werte im Oktal- und Hexadezimalformat eingeben. Jedes Hexadezimal- oder Oktalbyte wird jedoch als UTF-8-Byte betrachtet. Ungültige UTF-8-Bytes führen zu Fehlern, unabhängig davon, ob der Wert manuell eingegeben oder aus der Zwischenablage eingefügt wurde. Beispielsweise ist „\ xce\ x20” ein ungültiges UTF-8-Zeichen, da auf „c8” nicht „20” folgen kann (auf jedes Byte in einer Mehrbyte-UTF-8-Zeichenfolge muss das High-Bit gesetzt sein). Ein weiteres Beispiel für ein ungültiges UTF-8-Zeichen ist „\ xce\ xa9“, da die Hexadezimalzeichen durch ein Leerzeichen getrennt sind.

Funktionen, die UTF-8-Zeichenketten zurückgeben

Nur die Funktionen text>.XPATH und <text>.XPATH_JSON geben immer UTF-8-Zeichenketten zurück. Die folgenden MYSQL-Routinen bestimmen zur Laufzeit, welcher Zeichensatz zurückgegeben wird, abhängig von den Daten im Protokoll:

  • 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>)

Terminalverbindungseinstellungen für UTF-8

Wenn Sie eine Verbindung zur NetScaler-Appliance mithilfe einer Terminalverbindung einrichten (z. B. mithilfe von PuTTY), müssen Sie den Zeichensatz für die Übertragung von Daten auf UTF-8 festlegen.

Minimale und maximale Funktionen in einer fortschrittlichen politischen Formulierung

Die erweiterten Richtlinienausdrücke unterstützen die folgenden Mindest- und Maximalfunktionen.

  1. (<expression1>.max(<expression2>) - gibt das Maximum der beiden Werte zurück.
  2. (<expression1>.min(<expression2>) - gibt das Minimum der beiden Werte zurück.