PHP: バージョンアップできなくて使えない関数がある時の対応
2012年04月20日 16時03分
PHPがバージョンアップされて関数が増えたがサービスを停止するわけにもいかずPHPのバージョンアップができず使用できない。
こんな状況はないだろうか。
俺の場合は具体的にjson_decodeが使いたい。
でないとFacebookのSDKがFacebook needs the JSON PHP extensionってエラーが出て使用できない。
なんとかしたいなぁと思っていたらupgradephpというライブラリを発見した。
upgradephp
http://include-once.org/p/upgradephp/
バージョンアップされて追加された関数が定義されていない場合、追加されるという代物。
これインクルードしてからFacebookのSDKをインクルードしたらjson_decodeが定義されて問題なく処理できた。
こんなんあったんかぁ、素晴らしい。
ついでにFacebookが返すマルチバイト文字形式の\uxxxx形式が文字化けするので以下の関数をjson_decodeする前に通す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// UTF-8文字列をUnicodeエスケープする。ただし英数字と記号はエスケープしない。 function unicode_encode($str) { return preg_replace_callback("/((?:[^\x09\x0A\x0D\x20-\x7E]{3})+)/", "encode_callback", $str); } function encode_callback($matches) { $char = mb_convert_encoding($matches[1], "UTF-16", "UTF-8"); $escaped = ""; for ($i = 0, $l = strlen($char); $i < $l; $i += 2) { $escaped .= "\u" . sprintf("%02x%02x", ord($char[$i]), ord($char[$i+1])); } return $escaped; } // Unicodeエスケープされた文字列をUTF-8文字列に戻す function unicode_decode($str) { return preg_replace_callback("/\\\\u([0-9a-zA-Z]{4})/", "decode_callback", $str); } function decode_callback($matches) { $char = mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UTF-16"); return $char; } |