HOME > ブログ > 二次元バーコード・QRコードをPHPで自動生成

二次元バーコード・QRコードをPHPで自動生成

すっかり市民権を得た二次元バーコード=QRコード(デンソーウェーブ登録商標)だが、WEBアプリを作っていると空メール登録とかいろいろな場面でQRコードを画面に表示する機会は多い。

最初はフリーソフトでちょこちょこ作ったりしていたが、ポータルサイトなど扱う数が多くなるといちいち作ってアップロードとかやってらんないですよね。

PHPでQRコードを自動で生成することができる超カンタンなプログラムを利用することでクリアしましょう。

そのすばらしいプログラムをまず
http://www.swetake.com/
「バーコード・QRコード」→「QRcode Perl/CGI & PHP scripts ver. 0.50」→「qr_img0.50g.tar.gz (930KB)」
からダウンロードします。

解凍すると
qr_img0.50g
 ├data
 ├image
 ├perl
 ├php
 │ └qr_img.php
 ├README.sjis
 ├README.txt
 └README-e.txt
のようなフォルダ構成。

この中で使用するのは
「data」フォルダ
「image」フォルダ
「qr_img.php」ファイル
の3つ。

これを適当なところにアップして、「qr_img.php」に変数をなげればQRコードが自動で生成される。

<img src="qr_img.php?d=http://www.jinlingren.com&e=M&s=3&t=j">

という風にIMGタグに挿入すると


バーコードリーダーで撮影すると

こんな感じに。

最後の方の「e=M&s=3&t=j」のパラメータは詳しくは「README.txt」を読みましょう。
僕の場合はいつもこれで固定にして触っていません。
いままで運用できているので勝手にデフォルトにしています。

さてここではQRコード化するデータを
「http://www.jinlingren.com」
としたのですが、WEBアプリの関係では
「http://www.jinlingren.com/archives.php?yyyy=2008&mm=06」
などとしたい場合も出てくるでしょう。
といって、そのまま「d」パラメータに渡すとさっきの後ろの「e=M&s=3&t=j」とごっちゃになって正しいQRコードになりません。
どうやらごっそり
「http://www.jinlingren.com/archives.php?yyyy=2008&mm=06」
をひと塊として「d」パラメータに渡さなければならないようです。

そこで
<img src="qr_img.php?d=<?=urlencode("http://www.jinlingren.com/archives.php?yyyy=2008&mm=06")?>&e=M&s=3&t=j">

のように渡したいデータをURLエンコードしてパラメータに渡してやります。



うまいこといきましたね。



さて、URLなどアドレスだけじゃなく、メールを作成させたい時にももちろん対応は可能です。
さきほどのURLのところをメールアドレスにすればいいだけ。

<img src="qr_img.php?d=info@jinlingren.com&e=M&s=3&t=j">




簡単ですね。

ところがおっとどっこい、このメール作成の時にあらかじめ「件名」あるいは「本文」にテキストをいれておきたいなぁ〜なんてなるとちょっと考えなくてはなりません。

結論から言うと、一つのバーコードでは3キャリアに対応できなくて、「au・SoftBank用」と「DoCoMo用」との二つに分けなくてはなりません。

ホームページでメーラーを起動させて件名や本文をあらかじめ挿入させるには

<a href="mailto:address?subject=おはよう&body=こんにちは">

のようにすることはわりとメジャーだが、携帯の場合はあまり使う機会がないので知らない人が多いでしょう。

こうやります。

■au・SoftBank用
<?php
//日本語をいれる場合はSJISにエンコードしてURLエンコード
$subject = urlencode(mb_convert_encoding("おはよう", "SJIS"));
$body = urlencode(mb_convert_encoding("こんにちは", "SJIS"));
?>
<img src="qr_img.php?d=MAILTO:info@jinlingren.com%0D%0ASUBJECT:<?=$subject?>%0D%0ABODY:<?=$body?>&e=M&s=3&t=j">



「メール一括作成」なる見慣れぬリンクをクリックするとメール作成画面になりちゃんと「件名」「本文」入っているのが確認できます。


■DoCoMo用
<?php
//日本語をいれる場合はSJISにエンコードしてURLエンコード
$subject = urlencode(mb_convert_encoding("おはよう", "SJIS"));
$body = urlencode(mb_convert_encoding("こんにちは", "SJIS"));
?>
<img src="qr_img.php?d=MATMSG:TO:info@jinlingren.com;SUB:<?=$subject?>;BODY:<?=$body?>;;&e=M&s=3&t=j">




DoCoMoの場合は「メール作成」というリンクでメール作成画面にとべるようですね。
ちょっと反射して見づらいですが、ちゃんといけてるところが確認できますでしょうか?



マルチバイトの場合は文字コード(携帯はSJISが基本)を気にしたり、URLエンコードしたりしないといけないのでソースは複雑になるというかめっちゃ長くなったりする時があります。
作っていると「ほんまに合ってるん?」と自分で半信半疑で作っていますが、一旦作ってしまえばほぼ触ることがないので、ひとつずつ確認しながらコーディングしていけば大丈夫でしょう。

QRコードは使う方は便利ですが、作る方は大変です。
でも文句はいえませんね。こんな便利なプログラムが利用できるのですから。
感謝。


| PHP | Comment:2 |
コメント
Torie
You've ipmressed us all with that posting!
You've ipmressed us all with that posting!
| | 2012/02/02 02:18:57
zkliwenfmy
L5TsyV <a href="http://ptskyomndorf.com/">ptskyomndorf</a>
L5TsyV <a href="http://ptskyomndorf.com/">ptskyomndorf</a>;
| | 2012/02/03 17:09:50
コメント投稿












画像リロード
*半角の小英字、数字で構成されています