我正在使用PHP QR Code(http://phpqrcode.sourceforge.net)生成QR Code vCard。它可以工作,但不适用于巴西葡萄牙语字符。我找不到如何强制使用UTF-8。
问题是iOS无法识别字符,请检查以下屏幕截图(iOS和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 = 'emaildousuario@dominio.com.br';
// 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" />';
答案 0 :(得分:0)
我认为QR码没有做错任何事情。无论QR代码包含什么内容,Smartphone App都可以读取。
之后,Android-App可能会应用更多逻辑,包括一些编码检测,但是QR内容是相同的。
因此,在生成QR码之前,请尝试对数据进行编码:
$codeContents .= 'FN:'.utf8_encode($name)."\n";
答案 1 :(得分:0)
解决方案:QR Code将VCARD版本设置为2.1。我更改为3.0,现在可以完美地与iOS和Android一起使用。这不是编码问题。
$codeContents .= 'VERSION:3.0'."\n";