7
|
1 <?php
|
|
2
|
|
3 namespace Sabre\VObject;
|
|
4
|
|
5 /**
|
|
6 * Useful utilities for working with various strings.
|
|
7 *
|
|
8 * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/).
|
|
9 * @author Evert Pot (http://evertpot.com/)
|
|
10 * @license http://sabre.io/license/ Modified BSD License
|
|
11 */
|
|
12 class StringUtil {
|
|
13
|
|
14 /**
|
|
15 * Returns true or false depending on if a string is valid UTF-8
|
|
16 *
|
|
17 * @param string $str
|
|
18 * @return bool
|
|
19 */
|
|
20 static public function isUTF8($str) {
|
|
21
|
|
22 // Control characters
|
|
23 if (preg_match('%[\x00-\x08\x0B-\x0C\x0E\x0F]%', $str)) {
|
|
24 return false;
|
|
25 }
|
|
26
|
|
27 return (bool)preg_match('%%u', $str);
|
|
28
|
|
29 }
|
|
30
|
|
31 /**
|
|
32 * This method tries its best to convert the input string to UTF-8.
|
|
33 *
|
|
34 * Currently only ISO-5991-1 input and UTF-8 input is supported, but this
|
|
35 * may be expanded upon if we receive other examples.
|
|
36 *
|
|
37 * @param string $str
|
|
38 * @return string
|
|
39 */
|
|
40 static public function convertToUTF8($str) {
|
|
41
|
|
42 $encoding = mb_detect_encoding($str , array('UTF-8','ISO-8859-1', 'WINDOWS-1252'), true);
|
|
43
|
|
44 switch($encoding) {
|
|
45 case 'ISO-8859-1' :
|
|
46 $newStr = utf8_encode($str);
|
|
47 break;
|
|
48 /* Unreachable code. Not sure yet how we can improve this
|
|
49 * situation.
|
|
50 case 'WINDOWS-1252' :
|
|
51 $newStr = iconv('cp1252', 'UTF-8', $str);
|
|
52 break;
|
|
53 */
|
|
54 default :
|
|
55 $newStr = $str;
|
|
56
|
|
57 }
|
|
58
|
|
59 // Removing any control characters
|
|
60 return (preg_replace('%(?:[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F])%', '', $newStr));
|
|
61
|
|
62 }
|
|
63
|
|
64 }
|
|
65
|