public UriParamsIter (string @params, int length = -1, string separators = "&;", UriParamsFlags flags = 0)

Initializes an attribute/value pair iterator.

The iterator keeps pointers to the params and separators arguments, those variables must thus outlive the iterator and not be modified during the iteration.

If g_uri_params_www_form is passed in flags, `+` characters in the param string will be replaced with spaces in the output. For example, `foo=bar+baz` will give attribute `foo` with value `bar baz`. This is commonly used on the web (the `https` and `http` schemes only), but is deprecated in favour of the equivalent of encoding spaces as `20`.

Unlike with parse_params, g_uri_params_case_insensitive has no effect if passed to flags for UriParamsIter. The caller is responsible for doing their own case-insensitive comparisons.

GUriParamsIter iter;
GError *error = NULL;
gchar *unowned_attr, *unowned_value;

g_uri_params_iter_init (&iter, "foo=bar&baz=bar&Foo=frob&baz=bar2", -1, "&", G_URI_PARAMS_NONE);
while (g_uri_params_iter_next (&iter, &unowned_attr, &unowned_value, &error))
g_autofree gchar *attr = g_steal_pointer (&unowned_attr);
g_autofree gchar *value = g_steal_pointer (&unowned_value);
// do something with attr and value; this code will be called 4 times
// for the params string in this example: once with attr=foo and value=bar,
// then with baz/bar, then Foo/frob, then baz/bar2.
if (error)
// handle parsing error



an uninitialized UriParamsIter


the length of params, or `-1` if it is nul-terminated


the separator byte character set between parameters. (usually `&`, but sometimes `;` or both `&;`). Note that this function works on bytes not characters, so it can't be used to delimit UTF-8 strings for anything but ASCII characters. You may pass an empty set, in which case no splitting will occur.


flags to modify the way the parameters are handled.


a `%`-encoded string containing `attribute=value` parameters