読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

URLエンコードした文字列をprintfするときは

PHP 凡ミス

urlencodeについて

PHP: urlencode - Manual

PHPには 文字列を URL エンコードするメソッドがあります。

(例)

<?php
$hoge = "aiueo+kstnmyr";
print_r(urlencode($hoge)); // aiueo%2Bkstnmyr

printfしたいときに注意しないといけないことがある。

URLエンコードした文字列をprintfで表示する

<?php
$hoge = "aiueo+kstnmyr";

$hoge = "irohanihoheto" . urlencode($hoge);
printf("Hello: ${hoge}\n"); // Too few arguments エラー
printf("Hello: %s\n", $hoge); // Hello: irohanihohetoaiueo%2Bkstnmyr
printf("Hello: ${hoge}\n", $hoge); // Hello: irohanihohetoaiueokstnmyr

最初のprintfでは、hoge変数が第一引数の中で展開されてる。
printf("Hello: irohanihohetoaiueo%2Bkstnmyr");と同義になるわけだが、
こうなると%のせいで第二引数を要求されてしまい、Too few argumentsエラーになってしまうようだ。

とはいうものの、第二引数を与えてみてもフォーマット形式が正しくないからなのか
%は消えてしまうわけだけれども。