Reputation: 51
I'm generating a QR code vCard using PHP QR Code (http://phpqrcode.sourceforge.net). It works, but not with Brazillian Portuguese characters. I can't find how to force UTF-8 to it.
The problem is that iOS will not recognize the characters, check the screenshots below (iOS and Android).
<?php
include('phpqrcode/qrlib.php');
// how to build raw content - QRCode with detailed Business Card (VCard)
$tempDir = "";
// here our data
$name = 'João Carlos da Silva';
$sortName = 'da Silva;João Carlos';
$phone = '+55 (89) 2345-6789';
$phonePrivate = '+55 (94) 4521-3989';
$phoneCell = '+55 (66) 1234-5678';
$orgName = 'GH Construtora';
$email = '[email protected]';
// if not used - leave blank!
$addressLabel = 'Escritório';
$addressPobox = '';
$addressExt = '2º andar';
$addressStreet = 'Av. das Nações, 200';
$addressTown = 'Cidade';
$addressRegion = 'SP';
$addressPostCode = '18.902-100';
$addressCountry = 'Brasil';
// we building raw data
$codeContents = 'BEGIN:VCARD'."\n";
$codeContents .= 'VERSION:2.1'."\n";
$codeContents .= 'N:'.$sortName."\n";
$codeContents .= 'FN:'.$name."\n";
$codeContents .= 'ORG:'.$orgName."\n";
$codeContents .= 'TEL;WORK;VOICE:'.$phone."\n";
$codeContents .= 'TEL;HOME;VOICE:'.$phonePrivate."\n";
$codeContents .= 'TEL;TYPE=cell:'.$phoneCell."\n";
$codeContents .= 'ADR;TYPE=work;'.
'LABEL="'.$addressLabel.'":'
.$addressPobox.';'
.$addressExt.';'
.$addressStreet.';'
.$addressTown.';'
.$addressPostCode.';'
.$addressCountry
."\n";
$codeContents .= 'EMAIL:'.$email."\n";
$codeContents .= 'END:VCARD';
// generating
QRcode::png($codeContents, $tempDir.'026.png', QR_ECLEVEL_L, 7);
// displaying
echo '<img src="026.png" />';
Upvotes: 1
Views: 3045
Reputation: 51
Solution: QR Code was setting the VCARD version to 2.1. I changed to 3.0 and it works perfectly now with iOS and Android. It was not an encoding issue.
$codeContents .= 'VERSION:3.0'."\n";
Upvotes: 3
Reputation: 20889
I don't think the QR-Code is doing something wrong. The Smartphone App is reading, whatever the QR-Code contains.
The Android-App might apply a little more logic afterwards, including some encoding detection, but the QRs content is the same.
So, try to encode your data BEFORE generating the QR-Code:
$codeContents .= 'FN:'.utf8_encode($name)."\n";
Upvotes: 0