{"id":3341,"date":"2016-02-23T19:15:17","date_gmt":"2016-02-23T18:15:17","guid":{"rendered":"https:\/\/u-labs.de\/?p=3341"},"modified":"2016-02-23T19:15:17","modified_gmt":"2016-02-23T18:15:17","slug":"php-array-in-url-parameter-string-umwandeln-format-abcd","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/php-array-in-url-parameter-string-umwandeln-format-abcd\/","title":{"rendered":"PHP: Array in URL-Parameter String umwandeln (Format A=B&#038;C=D)"},"content":{"rendered":"<p>Manchmal muss man eine Reihe von URL-Parametern \u00fcbergeben, beispielsweise f\u00fcr eine API-Abfrage. Diesen String in PHP h\u00e4ndisch zu erzeugen\u00a0ist bereits keine sch\u00f6ne Aufgabe, zumal auch das Escaping der Werte &#8211; Beispielsweise\u00a0<strong>title=Hallo+Welt<\/strong> statt\u00a0<strong>title=Hallo Welt<\/strong> nicht vergessen werden darf. Besonders kniffelig wird es, wenn die Anzahl der Parameter vollkommen variabel ist. Denn schlie\u00dflich wird\u00a0die Einleitung des ersten Parameters mit einem Fragezeichen\u00a0<strong>?<\/strong> begonnen, alle weiteren trennt ein Und\u00a0<strong>&amp;<\/strong> Zeichen.<\/p>\n<p>Doch wer einen tieferen Blick in die Dokumentation wirft wird feststellen, dass man sich dar\u00fcber eigentlich gar keine Gedanken machen muss. Seit PHP 5 existiert n\u00e4mlich die recht unbekannte Funktion\u00a0<a href=\"http:\/\/php.net\/http_build_query\" target=\"_blank\" rel=\"nofollow\">http_build_query<\/a>, die f\u00fcr genau diesen Anwendungsfall gedacht ist: Man \u00fcbergibt ihr ein normales, assoziatives Array, und sie erstellt daraus den URL-Parameter String. Und zwar inklusive korrektem maskieren von Sonderzeichen wie Leerzeichen:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n$urlParameters = array(\r\n    'threadId' =&gt; 1234,\r\n    'outputFormat' =&gt; 'json'\r\n);\r\n$urlQueryString = http_build_query($urlParameters);\r\n$fullUrl = 'http:\/\/example.com\/api?' . $urlQueryString;\r\n<\/pre>\n<p>Mit diesem Beispiel wird die URL <strong>http:\/\/example.com\/api?threadId=1234&amp;outputFormat=json<\/strong> erzeugt. Optional bietet die Funktion auch die M\u00f6glichkeit, das Trennzeichen der einzelnen URL-Parameter definieren zu k\u00f6nnen. Dies ist hilfreich, wenn man beispielsweise maskierte URLs erzeugen m\u00f6chte, in denen das Und (<strong>&amp;<\/strong>) Zeichen escaped wird. Dazu \u00fcbergibt man das gew\u00fcnschte Trennzeichen einfach als dritten Parameter:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n$urlQueryString = http_build_query($urlParameters, '', '&amp;amp;');\r\n<\/pre>\n<p>Die Funktion ist sehr flexibel und kann beispielsweise auch f\u00fcr mehrdimensionale Arrays verwendet werden. Sogar aus selbstdefinierten Objekten wird ein valider Query-String anhand der \u00f6ffentlichen Attribute erzeugt. Zu beachten ist jedoch, dass Null-Werte ignoriert werden. \u00dcbergibt man also beispielsweise das folgende Array<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n$urlParameters = array(\r\n    'key1' =&gt; null\r\n    'key2' =&gt; 1234\r\n);\r\n<\/pre>\n<p>erh\u00e4lt man als Ausgabe nicht <strong>key1=&amp;key2=1234<\/strong> wie man es m\u00f6glicherweise erwarten w\u00fcrde, sondern lediglich <strong>key2=1234<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal muss man eine Reihe von URL-Parametern \u00fcbergeben, beispielsweise f\u00fcr eine API-Abfrage. Diesen String in PHP h\u00e4ndisch zu erzeugen\u00a0ist bereits keine sch\u00f6ne Aufgabe, zumal auch das Escaping der Werte &#8211; Beispielsweise\u00a0title=Hallo+Welt statt\u00a0title=Hallo Welt nicht vergessen werden darf. Besonders kniffelig wird es, wenn die Anzahl der Parameter vollkommen variabel ist. Denn schlie\u00dflich wird\u00a0die Einleitung des ersten &#8230;<\/p>\n","protected":false},"author":5,"featured_media":3428,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[365,55,364],"class_list":["post-3341","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-softwareentwicklung","tag-array","tag-php","tag-url-parameter"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/3341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=3341"}],"version-history":[{"count":5,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/3341\/revisions"}],"predecessor-version":[{"id":3385,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/3341\/revisions\/3385"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/3428"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=3341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=3341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=3341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}