+/* {{{ proto string http_build_str(array query [, string prefix[, string arg_separator]])
+ *
+ * Opponent to parse_str().
+ *
+ * Expects an array as first argument which represents the parts of the query string to build.
+ * Accepts a string as optional second parameter containing a top-level prefix to use.
+ * The optional third parameter should specify an argument separator to use (by default the
+ * INI setting arg_separator.output will be used, or "&" if neither is set).
+ *
+ * Returns the built query as string on success or FALSE on failure.
+ */
+PHP_FUNCTION(http_build_str)
+{
+ zval *formdata;
+ char *prefix = NULL, *arg_sep = INI_STR("arg_separator.output");
+ int prefix_len = 0, arg_sep_len = strlen(arg_sep);
+ phpstr formstr;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|ss", &formdata, &prefix, &prefix_len, &arg_sep, &arg_sep_len) != SUCCESS) {
+ RETURN_FALSE;
+ }
+
+ if (!arg_sep_len) {
+ arg_sep = HTTP_URL_ARGSEP;
+ arg_sep_len = lenof(HTTP_URL_ARGSEP);
+ }
+
+ phpstr_init(&formstr);
+ if (SUCCESS != http_urlencode_hash_recursive(HASH_OF(formdata), &formstr, arg_sep, arg_sep_len, prefix, prefix_len)) {
+ RETURN_FALSE;
+ }
+
+ if (!formstr.used) {
+ phpstr_dtor(&formstr);
+ RETURN_NULL();
+ }
+
+ RETURN_PHPSTR_VAL(&formstr);
+}
+/* }}} */
+