PHP QR Code将不显示UTF-8字符

时间:2018-11-07 22:52:12

标签: php qr-code vcard

我正在使用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" />';

Android iOS

2 个答案:

答案 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";