PHP urlencodeした値に++がつく

PHP

urlencodeは文字列をURL形式にエンコードしてくれます。

  • _. を除くすべての非英数文字が % 記号 (%)に続く二桁の数字で置き換えられます。

値に”++”が含まれるときは、空白を表しています。

PHP preg_match等PCRE系正規表現でUTF-8日本語がうまく処理できない

PHP

preg_match等のPCRE(Perl互換正規表現)でUTF-8の日本語のパターンマッチがうまくいかないことがあります。
preg系はUTF-8日本語を正しく処理できますが、パターン修飾子「u」を正規表現の最後につけてUTF-8エンコードされた文字列であることを明示しなければなりません。

パターン修飾子「u」の例です。

 preg_match("/日本語/u", $text)

ちなみに、最近のRHEL系ディストリビューションの標準RPMのPHPではmb_ereg系は正規表現エンジンにrubyと同じくoniguruma(鬼車)を使っているので、PCREの方がmb_eregより早いとは限らないようです。
最近のPHPでは、PCREのメリットは、mbstringに依存しないで済むことだと思います。
また、鬼車とPCREは非互換の部分があるので、その点をどう考えるかということもあると思います。

  • 参考

各種正規表現エンジンのベンチマーク(2010/7/21 MacOSX10.6.4 + gcc-4.2.1)
http://lh3lh3.users.sourceforge.net/reb.shtml

PHP mailtoリンクのタイトル文字化け対策

PHP

PHP mailtoリンクのデフォルトタイトルの文字化けを直す

HTMLのタグで、

 <a href="mailto:test@onlineconsultant.jp?subject=問い合わせ">

などと記述すると、タグにメールリンクが仕込まれ、ユーザーがリンクをクリックすると、ユーザー自身のメーラーが立ち上がり、件名に「問い合わせ」と入ります。

ただ、日本語の件名は文字化けしてしまう場合があるので、urlencodeする必要があります。
たとえば、PHPが使える環境でしたら、次のように出力しましょう。

 <a href="mailto:test@onlineconsultant.jp?subject=
 <?php 
    echo urlencode('問い合わせ');
 ?>">
 test@onlineconsultant.jp
 </a>

PHPファイルがUTF8だったりすると、SJISへ変換もする必要があります。
SJISへも変換したい場合は、次の通りです。

 //上記リンクのPHPの部分だけ抜粋
 echo urlencode(mb_convert_encoding('問い合わせ','SJIS','UTF-8'));

PHP jsonで送られてきたデータをphpの配列として認識させる方法

PHP

PHP jsonで送られてきたデータをphpの配列として認識させる方法

APIを利用時、JSONで送られてきたデータをPHPで解釈できるようにする方法がわからなかったので、メモしておきます!

 //jsonデータの取得
 $json_data = file_get_contents( jsonデータ );
 
 //jsonデータからphpの配列に変換
 $php_data = json_decode( $json_data, true );

PHP compact

PHP

compactという関数が、オフィシャルのPHPマニュアルだとちょっとわかりにくかったので、書いておきます。

http://jp.php.net/manual/ja/function.compact.php

 例1 compact() の例
 <?php
 $city  = "San Francisco";
 $state = "CA";
 $event = "SIGGRAPH";
 
 $location_vars = array("city", "state");
 
 $result = compact("event", "nothing_here", $location_vars);
 print_r($result);
 ?>

上の例の出力は以下となります。

 Array
 (
    [event] => SIGGRAPH
    [city] => San Francisco
    [state] => CA
 )

$A=B、$C=Dのような変数の組み合わせがあれば、それを配列にしてくれる、ということです。