1<?php 2 3namespace Sabre\VObject\Parser; 4 5use 6 Sabre\VObject\Reader; 7 8class QuotedPrintableTest extends \PHPUnit_Framework_TestCase { 9 10 function testReadQuotedPrintableSimple() { 11 12 $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aach=65n\r\nEND:VCARD"; 13 14 $result = Reader::read($data); 15 16 $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 17 $this->assertEquals('VCARD', $result->name); 18 $this->assertEquals(1, count($result->children())); 19 $this->assertEquals("Aachen", $this->getPropertyValue($result->LABEL)); 20 21 } 22 23 function testReadQuotedPrintableNewlineSoft() { 24 25 $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aa=\r\n ch=\r\n en\r\nEND:VCARD"; 26 $result = Reader::read($data); 27 28 $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 29 $this->assertEquals('VCARD', $result->name); 30 $this->assertEquals(1, count($result->children())); 31 $this->assertEquals("Aachen", $this->getPropertyValue($result->LABEL)); 32 33 } 34 35 function testReadQuotedPrintableNewlineHard() { 36 37 $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aachen=0D=0A=\r\n Germany\r\nEND:VCARD"; 38 $result = Reader::read($data); 39 40 $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 41 $this->assertEquals('VCARD', $result->name); 42 $this->assertEquals(1, count($result->children())); 43 $this->assertEquals("Aachen\r\nGermany", $this->getPropertyValue($result->LABEL)); 44 45 46 } 47 48 function testReadQuotedPrintableCompatibilityMS() { 49 50 $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aachen=0D=0A=\r\nDeutschland:okay\r\nEND:VCARD"; 51 $result = Reader::read($data, Reader::OPTION_FORGIVING); 52 53 $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 54 $this->assertEquals('VCARD', $result->name); 55 $this->assertEquals(1, count($result->children())); 56 $this->assertEquals("Aachen\r\nDeutschland:okay", $this->getPropertyValue($result->LABEL)); 57 58 } 59 60 function testReadQuotesPrintableCompoundValues() { 61 62 $data = <<<VCF 63BEGIN:VCARD 64VERSION:2.1 65N:Doe;John;;; 66FN:John Doe 67ADR;WORK;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;;M=C3=BCnster = 68Str. 1;M=C3=BCnster;;48143;Deutschland 69END:VCARD 70VCF; 71 72 $result = Reader::read($data, Reader::OPTION_FORGIVING); 73 $this->assertEquals([ 74 '', '', 'Münster Str. 1', 'Münster', '', '48143', 'Deutschland' 75 ], $result->ADR->getParts()); 76 77 78 } 79 80 private function getPropertyValue(\Sabre\VObject\Property $property) { 81 82 return (string)$property; 83 84 /* 85 $param = $property['encoding']; 86 if ($param !== null) { 87 $encoding = strtoupper((string)$param); 88 if ($encoding === 'QUOTED-PRINTABLE') { 89 $value = quoted_printable_decode($value); 90 } else { 91 throw new Exception(); 92 } 93 } 94 95 $param = $property['charset']; 96 if ($param !== null) { 97 $charset = strtoupper((string)$param); 98 if ($charset !== 'UTF-8') { 99 $value = mb_convert_encoding($value, 'UTF-8', $charset); 100 } 101 } else { 102 $value = StringUtil::convertToUTF8($value); 103 } 104 105 return $value; 106 */ 107 } 108} 109