This content has been machine translated dynamically.
Dieser Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde. (Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique. (Clause de non responsabilité)
Este artículo lo ha traducido una máquina de forma dinámica. (Aviso legal)
此内容已经过机器动态翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
이 콘텐츠는 동적으로 기계 번역되었습니다. 책임 부인
Este texto foi traduzido automaticamente. (Aviso legal)
Questo contenuto è stato tradotto dinamicamente con traduzione automatica.(Esclusione di responsabilità))
This article has been machine translated.
Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)
Ce article a été traduit automatiquement. (Clause de non responsabilité)
Este artículo ha sido traducido automáticamente. (Aviso legal)
この記事は機械翻訳されています.免責事項
이 기사는 기계 번역되었습니다.책임 부인
Este artigo foi traduzido automaticamente.(Aviso legal)
这篇文章已经过机器翻译.放弃
Questo articolo è stato tradotto automaticamente.(Esclusione di responsabilità))
Translation failed!
在表达式中指定字符集
NetScaler 设备上的策略基础架构支持 ASCII 和 UTF-8 字符集。默认字符集是 ASCII。如果您正在配置表达式的流量仅包含 ASCII 字符,则无需在表达式中指定字符集。该设备允许使用所有包含二进制字符的字符串和字符文字。但是,UTF-8 字符集仍然要求字符串和字符文字是有效的 UTF-8。
CLIENT.TCP.PAYLOAD(100).CONTAINS("\xff\x02")
在表达式中,必须在表达式中引入 SET_CHAR_SET () 函数,之后必须使用指定的字符集进行数据处理。例如,在表达式 HTTP.REQ.BODY(1000).AFTER_REGEX(re/following example/).BEFORE_REGEX(re/In the preceding example/).CONTAINS_ANY(“Greek_ alphabet”) 中,如果存储在模式集“Greek_alphabet”中的字符串为 UTF-8 格式,则必须立即在 CONTAINS_ANY(“<string>”) 函数之前包括 SET_CHAR_SET(UTF_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 () 函数覆盖。因此,如果给定简单表达式中的所有函数都用于 UTF-8,则可以在识别文本的函数(例如 HEADER(“<name>”) 或 BODY(<int>) 函数)之后立即包括 SET_CHAR_SET(UTF_8) 函数。在上面第一段之后的第二个示例中,如果传递给 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 字符集配置的表达式将继续按预期工作。
具有不同字符集的复合表达式
在复合表达式中,如果将表达式的一个子集配置为处理 ASCII 字符集中的数据,而其余表达式配置为处理 UTF-8 字符集中的数据,则在单独评估表达式时会考虑为每个单个表达式指定的字符集。但是,在处理复合表达式时,就在处理运算符之前,设备会将返回的 ASCII 值的字符集升级为 UTF-8。例如,在以下复合表达式中,第一个简单表达式计算 ASCII 字符集中的数据,而第二个简单表达式评估 UTF-8 字符集中的数据:
HTTP.REQ.HEADER("MyHeader") == HTTP.REQ.BODY(10).SET_CHAR_SET(UTF_8)
但是,在处理复合表达式时,就在计算“等于”布尔运算符之前,NetScaler 设备将 HTTP.REQ.HEADER(“myHeader”)返回值的字符集升级为 UTF-8。
以下示例中的第一个简单表达式计算 ASCII 字符集中的数据。但是,当 NetScaler 设备处理复合表达式时,就在连接两个简单表达式的结果之前,设备会将 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。以下是复合表达式的示例,该表达式首先检查请求的 Content-Type 标头中“charset”的值是否为“UTF-8”,然后检查请求中的前 1000 字节是否包含 UTF-8 字符串 Bücher:
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,则示例中的第二个表达式就足够了。
表达式中的字符和字符串文字
在表达式评估期间,即使当前字符集为 ASCII,分别用单引号 (‘’) 和引号 (“”) 括起来的字符文字和字符串文字也被视为 UTF-8 字符集中的文字。在给定表达式中,如果函数对 ASCII 字符集中的字符或字符串文字进行操作,并且在文字中包含非 ASCII 字符,则会返回错误。
注意:
现在,高级策略表达式中的字符串文字与策略表达式一样长。该表达式的长度允许为 1499 字节或 8191 字节。
十六进制和八进制格式的值
配置表达式时,可以输入八进制和十六进制格式的值。但是,每个十六进制或八进制字节都被视为 UTF-8 字节。无论值是手动输入还是从剪贴板粘贴,无效的 UTF-8 字节都会导致错误。例如,“\ xce\ x20”是无效的 UTF-8 字符,因为“c8”后面不能有“20”(多字节 UTF-8 字符串中的每个字节都必须设置高位)。无效 UTF-8 字符的另一个示例是“\ xce\ xa9”,因为十六进制字符由空格字符分隔。
返回 UTF-8 字符串的函数
只有 text>.XPATH
和 <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。
高级策略表达式中的最小和最大函数
高级策略表达式支持以下最小和最大函数。
-
(<expression1>.max(<expression2>)
-返回两个值中的最大值。 -
(<expression1>.min(<expression2>)
-返回两个值中的最小值。
共享
共享
This Preview product documentation is Cloud Software Group Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Cloud Software Group Beta/Tech Preview Agreement.
The development, release and timing of any features or functionality described in the Preview documentation remains at our sole discretion and are subject to change without notice or consultation.
The documentation is for informational purposes only and is not a commitment, promise or legal obligation to deliver any material, code or functionality and should not be relied upon in making Cloud Software Group product purchase decisions.
If you do not agree, select I DO NOT AGREE to exit.