Tôi đã gặp sự cố hôm nay khi tôi chuyển một khóa có giá trị được đặt thành một mảng trống đến http_build_query()
. Ví dụ:http_build_query bỏ qua khóa nếu giá trị là một mảng trống. Làm thế nào đây không phải là một lỗi?
$args = array("foo", "bar", array(), "baz");
$qs = http_build_query($args);
echo $qs; // outputs 0=foo&1=bar&3=baz, I expected 0=foo&1=bar&2=&3=baz
Đây là vấn đề đối với tôi, vì tôi chuyển một số dữ liệu đến API nội bộ qua http và tôi cần phải kéo tất cả các đối số ở phía bên kia.
Vâng, tôi đã giải quyết vấn đề này và đưa ra báo cáo lỗi sau: http://bugs.php.net/bug.php?id=50407. Câu trả lời ngắn gọn từ quản trị viên là "Không cài đặt giống như cài đặt trống. Không có lỗi".
Ai đó có thể giải thích cho tôi tại sao đây không phải là lỗi không? Có ai có bất kỳ ý tưởng cho một workaround, ngoài việc hack què của thiết lập một giá trị tùy ý ở một bên và giải thích giá trị đó như là một giá trị sản phẩm nào trên khác?
EDIT
Dưới đây là lý do tại sao tôi nghĩ rằng đó là một lỗi:
$args = array("foo", "bar", array(), "baz");
$qs = http_build_query($args);
parse_str($qs, $query);
echo ($args == $query); // false, I expect it to be true
Tôi đoán có lẽ đó là ngây thơ của tôi để xem xét parse_str()
và http_build_query()
là nghịch đảo của nhau.
Tôi đang đăng giải pháp "lame hack" hiện tại của mình dưới dạng câu trả lời bên dưới.
Vì vậy, bạn sẽ nói rằng API của bạn sẽ mù quáng tin tưởng vào dữ liệu đến thông qua HTTP không có xác nhận? Nghe có vẻ thú vị ... –
không có vẻ như anh ấy nói bất cứ điều gì liên quan đến những gì sẽ xảy ra với dữ liệu bên trong API. – Johrn
@Col. Shrapnel: Đó là một bước nhảy vọt. Anh ta chỉ muốn có thể truyền một biến với một giá trị rỗng. – webbiedave