# Civetweb API Reference ### `mg_split_form_urlencoded( data, form_fields, num_form_fields );` ### Parameters | Parameter | Type | Description | | :--- | :--- | :--- | |**`data`**|`char *`|Form encoded data to be split. This buffer will be modified by `mg_split_form_urlencoded`.| |**`form_fields`**|`struct mg_header []`|Output buffer for name-value-pairs.| |**`num_form_fields`**|`unsigned`|Number of elements in form_fields buffer.| ### Return Value | Type | Description | | :--- | :--- | |`int`|Number of encoded form fields, or an error code| ### Description The function `mg_split_form_urlencoded()` can be used to split an x-www-form-urlencoded data field into name-value-pairs. It can split the POST body data of an x-www-form-urlencoded html form, or a query string. The parameter `data` is modified by this function, so the `query_string` member of `struct mg_request_info` must not be passed directly to this function, since `query_string` is a `const char *`. Use a copy (e.g, created by `strdup`) as input for `mg_split_form_urlencoded()`. The caller has to provide all required buffers, since the function does not do any memory handling itself. Percent-encoded elements will be decoded. Example for an x-www-form-urlencoded format encoded input: `data = "keyName1=value1&keyName2=value2&keyName3=value3"` The function will return 3 and set `form_fields[0].name = "keyName1"`, `form_fields[0].value = "value1"`, `form_fields[1].name = "keyName2"`, `form_fields[1].value = "value2"`, `form_fields[2].name = "keyName3"`, `form_fields[2].value = "value3"`, and modify `data` to `"keyName1\x00value1\x00keyName2\x00value2\x00keyName3\x00value3"`. ### See Also * [`struct mg_header`](mg_header.md) * [`struct mg_request_info`](mg_request_info.md) * [`mg_get_cookie();`](mg_get_cookie.md) * [`mg_get_var();`](mg_get_var.md) * [`mg_get_var2();`](mg_get_var2.md) * [`mg_handle_form_request();`](mg_handle_form_request.md)