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!
在表达式中指定字符集
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 (”<string>“) 函数之前,如下所示:
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) 函数。在上面第一段之后的第二个示例中,如果传递给后面的 ASCII 参数更改为 UTF-8 字符串,则可以在身体 (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)
但是,在处理复合表达式时,就在评估“等于”布尔运算符之前,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_CHAR_SET(UTF_8)
因此,复合表达式返回 UTF-8 字符集中的数据。
根据流量的字符集指定字符集
您可以根据流量特征将字符集设置为 UTF-8。如果您不确定所评估流量的字符集是否为 UTF-8,则可以配置一个复合表达式,其中第一个表达式检查 UTF-8 流量,后续表达式将字符集设置为 UTF-8。下面是一个复合表达式的示例,该示例首先检查请求的“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)设置到 Citrix ADC 设备的连接时,必须设置将数据传输到 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.