1

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" />'; 

Android iOS

5
  • Go through stackoverflow.com/questions/279170/… in its entirety. There are too many possible reasons and you'll probably find everything in there to fix this. Commented Nov 7, 2018 at 23:47
  • It doesn't help me (I checked). My page is set to UTF-8, and my strings are UTF-8, my issue is the return of the QR Code, which either is not returning UTF-8 or I need to use some other encoding so iOS reads it right. Please consider re-opening my question. Commented Nov 8, 2018 at 0:28
  • I doubt the QR code is doing this. UTF-8 has 2 different methods of saving. One "with" the BOM (byte order mark) and one without. "All" files "must" be saved in the same format. If one fails, the rest fails. You could also consider saving as ANSI; sometimes that works and I had to use that for something some time ago myself. This is definitely an encoding issue. Commented Nov 8, 2018 at 1:26
  • I fixed the code now. Tried everything related to the encoding issue, but nothing changed, everything is UTF-8 already. The real problem was that the example code I used to generate the QR Code was setting the VCARD version to 2.1. When I realized that, I changed to 3.0 and it works perfectly now with iOS and Android. It was not an encoding issue after all. Thank you. Commented Nov 8, 2018 at 3:45
  • That's great news. I reopened the question so you can post your own answer now. I rolled the question back. Edit: I also added the "vcard" tag which is relevant to the question/problem. Commented Nov 8, 2018 at 11:13

2 Answers 2

3

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"; 
Sign up to request clarification or add additional context in comments.

Comments

0

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

1 Comment

Didn't work on iOS. Android also displays funny characters now (different from the iOS).

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.