在表达式中指定字符集
Citrix ADC设备上的策略基础结构支持 ASCII码和 UTF-8字符集。默认字符集是 ASCII码如果要为其配置表达式的流量仅包含 ASCII码字符,则无需在表达式中指定字符集。设备允许包含二进制字符的所有字符串和字符文本。但是,UTF-8字符集仍需要字符串和字符文本为有效的 UTF-8
CLIENT.TCP.PAYLOAD (100) .CONTAINS(“\ xff \ x02”)
在表达式中,必须在表达式中的点引入SET_CHAR_SET()函数,之后必须在指定的字符集中执行数据处理。例如,在表达式HTTP.REQ.BOYE(1000)中,如果存储在模式集“希腊字母”中的字符串在utf - 8中,则必须包含SET_Char_SET (UTF_8)函数紧接在包含S_any(“<字符串>”)函数之前,如下所示:
HTTP.REQ.BODY(1000)。AFTER_REGEX (re /下面的例子)。BEFORE_REGEX(re/在前面的例子中/). set_char_set (UTF_8)。CONTAINS_ANY(“Greek_字母”)
集合\字符\集合()函数设置表达式中所有进一步处理(即对于所有后续函数)的字符集,除非稍后在表达式中被另一个更改字符集的 集合\字符\集合()函数覆盖。因此,如果给定简单表达式中的所有函数都适用于 UTF-8则可以在识别文本的函数(例如,标题(
HTTP.REQ.BODY(1000).SET_CHAR_SET(UTF_8).AFTER_REGEX(re/Bücher/).BEFORE_REGEX(re/Wörterbuch/).包含任何(“希腊字母”)
UTF-8字符集是 ASCII码字符集的超集,因此,如果将字符集更改为 UTF-8则为 ASCII码字符集配置的表达式将继续按预期工作。
具有不同字符集的复合表达式
在复合表达式中,如果将表达式的一个子集配置为处理 ASCII码字符集中的数据,并将其余表达式配置为处理 UTF-8字符集中的数据,则在评估表达式时考虑为每个单独表达式指定的字符集单独。但是,在处理复合表达式时,在处理操作符之前,设备会将返回 ASCII码值的字符集提升为 UTF-8例如,在以下复合表达式中,第一个简单表达式评估 ASCII码字符集中的数据,而第二个简单表达式评估 UTF-8字符集中的数据:
HTTP.REQ.HEADER(“到了头”)= = HTTP.REQ.BODY (10) .SET_CHAR_SET (UTF_8)
但是,在处理复合表达式时,就在评估”等于“布尔运算符之前,Citrix ADC设备会将HTTP.REQ.HITAL (MySheader)返回的值的字符集提升为utf - 8。
以下示例中的第一个简单表达式评估 ASCII码字符集中的数据。但是,当 Citrix ADC设备处理复合表达式时,在连接两个简单表达式的结果之前,该设备会将 HTTP.REQ.BOTY(10)返回的值的字符集提升为 UTF-8
HTTP.REQ.BODY(10)+HTTP.REQ.HEADER(“MyHeader”).SET\u CHAR\u SET(UTF\u 8)
因此,复合表达式返回utf - 8字符集中的数据。
根据流量的字符集指定字符集
您可以根据流量特征将字符集设置为utf - 8。如果您不确定所评估流量的字符集是否为utf - 8,则可以配置一个复合表达式,其中第一个表达式检查utf - 8流量,后续表达式将字符集设置为utf - 8。下面是一个复合表达式的示例,该示例首先检查请求的“utf - 8”的内容类型标头中的“字符集”值,然后检查请求中的前1000个字节是否包含utf - 8字符串肉商:
HTTP.REQ.HEADER(“内容类型”).SET_TEXT_MODE(IGNORECASE).TYPECAST_NVLIST_T('=',';','“)).VALUE(“字符集”).EQ(“UTF-8”)和&HTTP.REQ.BODY(1000).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
和
函数始终返回 UTF-8字符串。以下 MySQL例程在运行时确定要返回的字符集,具体取决于协议中的数据:
MYSQL\u客户端\u T.USER
MYSQL_客户端_T.数据库
MYSQL_REQ_QUERY_T.命令
MYSQL\u请求\u查询\u T.TEXT
MYSQL\u请求\u查询\u T.TEXT(
) MYSQL\u RES\u ERROR\u T.SQLSTATE
MYSQL_RES_ERROR_T。消息
MYSQL\u RES\u FIELD\u T.CATALOG
MYSQL\u RES\u FIELD\u T.DB
MYSQL_RES_FIELD_T。表格
MSQL_RES_FIELD_T。ORIGINAL_TABLE
MYSQL_RES_FIELD_T。的名字
MYSQL\u RES\u字段\u T.ORIGINAL\u名称
MYSQL\u RES\u OK\u T消息
MYSQL_RES_ROW_T。TEXT_ELEM (< unsigned int >)
UTF-8的端点连接设置
通过使用端点连接(例如使用油灰)设置到Citrix ADC设备的连接时,必须设置将数据传输到utf - 8的字符集。
高级策略表达式中的最小和最大函数
高级策略表达式支持以下最小值和最大值函数。
(< expression1 > .max (< expression2 >)
- 返回两个值中的最大值。(
- 返回两个值中的最小值。.min( )