Skip to content

http.form

query/form 解析与构造(P4-B;application/x-www-form-urlencoded + URL query 共用语法,RFC 9110 §11.2 与 WHATWG urlencoded 序列化惯例) 形态(与 http/parse.ct 头注同源): ① 零 use 纯模块(菱形 use E5020 规避;同 message.ct ②)。百分号编解码不 复用 std/enc.pct_(防 use 菱形),本地窄实现(判法同源:hex 值 + 可打印 ASCII 域,C8 同款;漂移由双向向量钉住,登记)。 ② 语义(登记): - 解码侧(服务端姿态):'+' → 空格;'%XX' 十六进制(大小写均可);裸 '%' 或 XX 非十六进制 → 非法。域:解码输出限可打印 ASCII(32..126,除 123 '{' —— C8 约束同 std/enc,Unicode/控制字符 → 非法,登记)。 - 对分割:先 '&' 后首 '=';无 '=' → 键有值空(bare key,登记容忍); 空 token(如 "a=1&&b=2")跳过(容忍,登记);键允许空("=v")。 - 构造侧:RFC 3986 unreserved(A-Z a-z 0-9 - . _ ~)原样,其余百分号 大写 hex;空格 → %20(非 '+':构造侧取无歧义形,解码侧 '+/%20' 双收 —— 不对称登记,服务端姿态)。 ③ 结构面(登记,(h) 家族新发射面缺口):Option[FormPair] 的变体载荷 struct 与 List[struct] 的 push 在发射面产错型强转(实证 c_form emit: (t_FormPair)(long) / list_push((const char)(long)(t_FormPair){...})) —— 故本模块【不出 struct】:form_parse 返回交错 K/V 道 List[Str] ([k0, v0, k1, v1, …],取值经 form_key_at/form_val_at getter,零拷贝 语义不变);单对解码出 k/v 双 Str 形(form_decode_k/v)。struct 载荷 发射缺口待发射器任务收口后可回迁 FormPair 形。 ④ 发射面纪律:无闭包、无方法调用、无 if/match 表达式,while 体仅标量 局部((f)/(g));Option 消费用 match 形助手(C13a)。

pub fn

Signature Returns Description
form_pct_encode(s: Str) Str 百分号编码(RFC 3986 unreserved 原样,大写 hex;空格 → %20)。
form_decode_k(s: Str, dft: Str) Str 单对 "k=v" 的键(首 '=' 前;无 '=' 全串);整对非法 → dft。
form_decode_v(s: Str, dft: Str) Str 单对的值(首 '=' 后;无 '=' → "");整对非法 → dft。
form_decode_ok(s: Str) Bool 单对合法性(k/v 双双落 C8 域且百分号形合规)。
form_parse(s: Str) Option[List[Str]] 整串解析:'&' 分割;空 token 跳过;任一非空 token 非法 → 整体 None(严)。
返回 List[Str] 交错 [k0, v0, k1, v1, …]。
form_count(ps: List[Str]) I32 K/V 道取值 getter(交错布局的唯一直读面)。
form_key_at(ps: List[Str], i: I32) Str —
form_val_at(ps: List[Str], i: I32) Str —
form_encode_pair(k: Str, v: Str) Str 单对构造 "k=v"(口径见头注②:空格 → %20)。
form_encode_pairs(ps: List[Str]) Str 整串构造('&' 连接;空道 → "")。
form_parse_ok(o: Option[List[Str]]) Bool ---- Option 消费助手(match 形;C13a)----
form_str_get(o: Option[Str], dft: Str) Str —