長いテキストを複数に分割して作成する「QR Code」

Tool

2024年5月7日追記
Googleチャートを使っていましたが、サービスを停止したようで、使えなくなってしまいました。
別の仕組みを利用したツールを作っていますのでそちらを試してください。

記事は下のとおりです。


QRコードには驚くほど大量の情報を埋め込むことができます。
しかし漢字を使うと減ってしまいます。
Googleには文字列をURLで与えるとQRコードを生成する仕組みがありますが、URLにするさいにエンコードする必要があるのでなおさらです。
そこで長いテキストは自動的に分割して複数のQRコードを生成する仕組みを考えました。

2022年3月4日追記
出力に関しては元々、UTF-8に対応していましたが、今回、Shift_JISにも対応しました(ISO-8859-1にも対応していますが未確認です)。

コメント

  1. テツ より:

    QR Code すごい便利です。
    理想に近いのですが、一つのQRコードに入れる文字数をもう少し増やせませんか?
    漢字であってもQRコードの仕様であれば1700文字程度はできる記載があったのですが、リーダーの種類も制限があるんでしょうか?
    QRコードを利用してデータベースをエクセルに作りたいんですが250文字前後だと何回もQRコードをスキャンするのが面倒なので

  2. stabucky より:

    >テツさん
    ご利用ありがとうございます。
    これを作ったときの記憶がないのですが、コードを見るとURLの長さの上限2083で切るようにしています。
    GETでなくPOSTで渡す方法があるかもしれません。
    約束はできませんが、ちょっと考えてみます。

  3. テツ より:

    回答ありがとうございます。もう一点なんですが、漢字を出力したいのですが、このQRコードはおそらく
    UTF8で対応していると思われます。エクセルに落とす際にはSHIFT-JISでないとスキャナの仕様上どうも
    文字化けしてしまいます。
    このツールをshift-jisでも出力できるようにしていただけると非常に助かります。
    色々さがしてみましたが、他にこのような仕様のツールないようなのであると助かる方は多いように思います。

  4. stabucky より:

    >テツさん
    Shift_JISに対応しました。
    確認いただけると助かります。

  5. テツ より:

    本当にありがとうございます。試してみます。
    図々しいですが、文字数については対応できる可能性はあるんでしょうか?ネット上でPythonのコードでXMLで1800文字で対応しているコードをみたのですが、やり方が間違っていたのか。
    XMLのコードまで含むからからなのか文字数がそれほど入れられないようでした。

  6. テツ より:

    何度もすいません。こちらのShift_JIS出力はどうやってやれば利用できるんでしょうか?
    選択する欄などがないようなんですが?

  7. stabucky より:

    テツさん
    文字数については研究中です。
    PHPを使う方法、Pythonを使う方法などを考えています。苦戦しています。私の能力では難しそうです。
    文字コードについてはブラウザの更新、再起動などを試してみてください。

  8. テツ より:

    文字コードについてはブラウザの更新、再起動などを試してみてください。QRコードをShift_JIS出力
    するには具体的にどうすればよいでしょうか?どうやるのかブラウザの更新ってF4ですよね??
    お手数おかけしますが、ご回答お願いします。
    文字数の件は無理を言ってもうしわけございません。

  9. テツ より:

    すいませんできました?更新押すとできる理由がよくわかりませんでしたが。

  10. […] 以前、長いテキストを複数に分割して作成する「QR Code」について書きました。 QRコードには文字数の制限があるので、文字列が長い場合、分割して複数のQRコードにするというツールです。 しかし、GoogleのAPIを使っているため、URLの制限があり、一つのQRコードで200文字強しか表せませんでした。 今回、Googleではなく、PHPのライブラリを使う方法を考えました。 […]

  11. テツ より:

    すいません。しばらくこの内容を見ていなかったのですが、やはり文字数が少ないとインク代が多くなってしまい、大変でした。PHPのライブラリかpythonあたりですかね?
    これは実用化できそうですか?完全に自分の都合ではありますが?

  12. stabucky より:

    >テツさん
    700文字までに対応するバージョンを作りました。
    記事
    https://stabucky.com/wp/archives/14791
    ツール
    https://tool.stabucky.com/maker/qr/

  13. テツ より:

    ありがとうございます。このQRコードはShift_JIS出力ですか?
    あと以前のようにテキストを表示しないよう選択できると助かります、おそらくこのプログラムは
    売れると思いますけど。やはり当たり前ですが、QRコードの大きさがでかくなりますね。

  14. stabucky より:

    >テツさん
    エンコードのコントロール方法がわからずデフォルトのままです。エンコードの種類はわかりません。
    テキストの表示は検討します。
    サイズについてはどうしようもないです。

  15. テツ より:

    久しぶりに使ってみたら使えなかったんですが、サービス終了ですかQRコードが出てこなくなりました。すごい便利だったんですが

  16. stabucky より:

    >テツさん
    ありがとうございます。
    Googleの仕様変更で使えなくなってしまったようです。
    別の手法で同じような仕組みを作っていますのでこちらを試してください。
    https://tool.stabucky.com/maker/qr/
    もし要望等があればできる範囲で対応しますので連絡ください。
    よろしくお願いします。

  17. テツ より:

    ありがとうございます。ただ前のものは文章を複数のQRコードで作成されたShiftJISでできたのが便利だったのですが、再度の更新が難しいのであれば難しいと思いますが以前のサンプルコードを提示していただけると助かります。
    Pythonとかでできそうな気がするのですが

  18. stabucky より:

    >テツさん
    テスト版ですがShiftJISに対応したバージョンを作ってみました。
    https://tool.stabucky.com/maker/qr/index_test.php
    ただ私はiPhoneで確認する方法しか知らず、iPhoneではUTF8もShiftJISも同じように表示されてしまうので判断できません。
    確認いただけると助かります。
    問題なければ本番に反映したいと思います。
    よろしくお願いします。

  19. テツ より:

    確認できました。ShiftJISの設定でエクセル(ShiftJIS)にきちんと出力できましたよ。ほとんどのWEBシステムはUTF-8ですからね。
    ただ正直あった以前の連続QRが他になかったので、すごい便利だったんですが、1個だけのQRだとサイズが大きくなりすぎるのとUTF-8のメモ帳に出力という方法もないことはないので。AIでもできたんですが繰り返しを大量にやる場合はプログラミングでやった方が安定しますからね。

  20. stabucky より:

    >テツさん
    ShiftJISの動作確認、ありがとうございました。本番に反映しようと思います。
    大きなQRコードに大量の文字列を詰め込むのではなく、小さなQRコードを多く表示するほうがいいということですか。
    ちょっと試してみます。

  21. テツ より:

    前にあったQRコードの連続のやつが理想でしたよ。色々探したのですが、以前動作していたようなやつは有料のものはありましたが、他にはなかったのでわかる人には相当価値のある素晴らしいものだったと思いますよ。

  22. テツ より:

    正直な話1個ずつのやつは今の時代、ブラウザの機能でもありますしね。無理いって申し訳ございません。

  23. stabucky より:

    >テツさん
    改造してみました。
    ShiftJISに対応。文字数選択に対応。画像サイズに対応。テキスト表示有無に対応。
    試していただけると助かります。

  24. テツ より:

    問題なく動作しましたよ素晴らしいです。
    shiftJISとUTF-8もサイズ変更も含めそれぞれ動作確認できました。

    あくまで参考として気になったこととして。
    文字数 OK 文字を300文字条件で350文字 改行があると2文字程度消費
    無条件で300文字でそれ以降は入らないので警告が出るとより良いかもしれないです。

    文字サイズ OK
    shiftJISとUTF-8はたしかですが文字コードのサイズが違うので日本語であればshiftJISの方が文字コードが少ない分QRコード作成時の文字数負担が軽くなるのかなと思います。よく知らないですが多分?また文字数の条件は半角と全角とで条件が変わらないものなのかぐらいですね。
    前みたいに元のテキストが表示できるわかりやすいです。

    またAIを利用してQRコード分割は可能なんですが、やはりあまり使い勝手よくないですね。QRコードの出力の配置やらいろいろなかなかうまく動作しないです。1個のQRコードの作成なら問題ないですけど。

  25. テツ より:

    確認不足でした。これ複数のQRにも対応されてましたね。本当にありがとうございます。

    これ相当使えると思いますよ。あともしですが一般的にみんなに使ってほしいとかの場合はWordやメモ帳の場合はUTF-8でとかエクセルの場合はshiftJISで設定ととかなんかわかりやすい資料があると他の方もわかりやすいかと思われます。QRコード側の設定の問題がありますけど。
    自分自身がこの部分で昔困ったことがあったので参考ですが。

  26. テツ より:

    一点大きな問題がありました。日本語は大丈夫そうですが
    元データ
    入力補助フォームクリップボードにコピーfunction copyToClipboard() {var data = “”

    <h2>入力補助フォーム</h2><div id="formContainer"></div><button type="button" onclick="copyToClipboard()">クリップボードにコピー</button><script>function copyToClipboard() {var data = ""

    こんなふうに出力されます。UTF-8でメモ帳です。
    AI回答 参考

    QRコードに含まれるHTMLがエンコードされた形で出力されています。これは、QRコード生成時に文字をそのままエンコードせず、HTMLエンティティに変換されたためです。この問題を解決するには、HTMLエンティティを使用せずに、元の文字列をそのままQRコードにエンコードする必要があります。

    以下の手順で試してみてください:

    HTMLをそのままQRコードに変換するツールやライブラリを使用します。
    生成するQRコードがUTF-8で正しくエンコードされていることを確認します。
    例として、JavaScriptを使ってQRコードを生成する方法を示します。次のコードをHTMLファイルに埋め込んで、ブラウザで開くことでQRコードを生成できます。

  27. stabucky より:

    >テツさん
    確認ありがとうございます。
    テキスト表示ありをデフォルトにしました。
    エンコードの用途については検討します。
    入力された文字列についてはセキュリティ対策でエスケープ処理をしています。これはこのままとします。

  28. テツ より:

    テキスト表示は多分全部の文字は出力されてないですよね。最後の部分がいくつか欠けていました。エスケープ処理ってどういうものですか?

  29. テツ より:

    以前の文章のコード部分はきちんとこちらで貼り付けるとでてますね。なんか表示が違ってたんですよね

  30. stabucky より:

    >テツさん
    エスケープ処理は次のページのとおりです。
    https://www.php.net/manual/ja/function.htmlspecialchars.php

  31. テツ より:

    ありがとうございます。参考がわかりやすかったです。ありがとうございます。
    自分の使用上はこれは邪魔ですね。

    & (アンパサンド) &
    ” (ダブルクォート) ENT_NOQUOTES が指定されていない場合、"
    ‘ (シングルクォート) ' (ENT_HTML401 の場合) あるいは ' ( ENT_XML1、ENT_XHTML、 ENT_HTML

  32. テツ より:

    すいませんセキュリティ対策でエスケープ処理が必要とのことですが、自分でPythonとかで作れば可能なんですよね。
    ここまでうまく作れる自信ないですけど!

  33. テツ より:

    冷静に考えれば何に変換されてればExcelやらで変換すれば元に戻せそうですね。

  34. stabucky より:

    >テツさん
    そのとおりだと思います。ローカルで処理するならばセキュリティ対策は不要です。

タイトルとURLをコピーしました