Hướng dẫn dùng php http_build_query trong PHP

Tôi đang tìm tên của hàm PHP để xây dựng chuỗi truy vấn từ một mảng các cặp giá trị khóa. Xin lưu ý, tôi đang tìm kiếm hàm PHP tích hợp để thực hiện việc này, không phải là một homebrew (đó là tất cả một tìm kiếm google dường như trở lại). Có một cái, tôi không thể nhớ tên của nó hoặc tìm thấy nó trên php.net. IIRC tên của nó không phải là trực quan.

  • php

150 hữu ích 0 bình luận 132k xem chia sẻ

answer

283

Hướng dẫn dùng php http_build_query trong PHP

Bạn đang tìm kiếm http_build_query().

283 hữu ích 4 bình luận chia sẻ

answer

22

Hướng dẫn dùng php http_build_query trong PHP

Đây là một cách thực hiện thân thiện với php4 đơn giản:

/**
* Builds an http query string.
* @param array $query  // of key value pairs to be used in the query
* @return string       // http query string.
**/
function build_http_query( $query ){

    $query_array = array();

    foreach( $query as $key => $key_value ){

        $query_array[] = urlencode( $key ) . '=' . urlencode( $key_value );

    }

    return implode( '&', $query_array );

}

22 hữu ích 3 bình luận chia sẻ

answer

3

Hướng dẫn dùng php http_build_query trong PHP

Cũng như thêm vào @thatjuancâu trả lời.
Phiên bản PHP4 tương thích hơn của điều này:

if (!function_exists('http_build_query')) {
    if (!defined('PHP_QUERY_RFC1738')) {
        define('PHP_QUERY_RFC1738', 1);
    }
    if (!defined('PHP_QUERY_RFC3986')) {
        define('PHP_QUERY_RFC3986', 2);
    }
    function http_build_query($query_data, $numeric_prefix = '', $arg_separator = '&', $enc_type = PHP_QUERY_RFC1738)
    {
        $data = array();
        foreach ($query_data as $key => $value) {
            if (is_numeric($key)) {
                $key = $numeric_prefix . $key;
            }
            if (is_scalar($value)) {
                $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($key) : rawurlencode($key);
                $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($value) : rawurlencode($value);
                $data[] = "$k=$v";
            } else {
                foreach ($value as $sub_k => $val) {
                    $k = "$key[$sub_k]";
                    $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($k) : rawurlencode($k);
                    $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($val) : rawurlencode($val);
                    $data[] = "$k=$v";
                }
            }
        }
        return implode($arg_separator, $data);
    }
}

3 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng php http_build_query trong PHP

nhưng để đảo ngược công việc này, bạn có thể sử dụng:

void parse_str(str $input, array $output);
//for example:
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

Chúc may mắn.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng php http_build_query trong PHP

Vì câu hỏi này khá cũ và đối với PHP, đây là một cách để làm điều đó trong khung công tác PHP (hiện tại) rất phổ biến.

Để mã hóa chuỗi truy vấn cho một đường dẫn trong ứng dụng của bạn, hãy đặt tên cho tuyến đường của bạn và sau đó sử dụng route()hàm trợ giúp như sau:

route('documents.list.', ['foo' => 'bar']);

Kết quả sẽ trông giống như:

http://localhost/documents/list?foo=bar

Ngoài ra, hãy lưu ý rằng nếu tuyến đường của bạn có bất kỳ tham số phân đoạn đường dẫn nào /documents/{id}, ví dụ , hãy đảm bảo bạn cũng chuyển một idđối số cho các route()tham số, nếu không, nó sẽ mặc định sử dụng giá trị của tham số đầu tiên.

0 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng php http_build_query trong PHP

Implode sẽ kết hợp một mảng thành một chuỗi cho bạn, nhưng để tạo một truy vấn SQL ra một cặp kay / value bạn sẽ phải viết hàm riêng của mình.

1 hữu ích 2 bình luận chia sẻ

Hướng dẫn dùng php http_build_query trong PHP

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Hướng dẫn dùng php http_build_query trong PHP