You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.6 KiB
66 lines
1.6 KiB
<?php |
|
|
|
namespace Sabre\VObject; |
|
|
|
/** |
|
* Useful utilities for working with various strings. |
|
* |
|
* @copyright Copyright (C) fruux GmbH (https://fruux.com/) |
|
* @author Evert Pot (http://evertpot.com/) |
|
* @license http://sabre.io/license/ Modified BSD License |
|
*/ |
|
class StringUtil { |
|
|
|
/** |
|
* Returns true or false depending on if a string is valid UTF-8. |
|
* |
|
* @param string $str |
|
* |
|
* @return bool |
|
*/ |
|
static function isUTF8($str) { |
|
|
|
// Control characters |
|
if (preg_match('%[\x00-\x08\x0B-\x0C\x0E\x0F]%', $str)) { |
|
return false; |
|
} |
|
|
|
return (bool)preg_match('%%u', $str); |
|
|
|
} |
|
|
|
/** |
|
* This method tries its best to convert the input string to UTF-8. |
|
* |
|
* Currently only ISO-5991-1 input and UTF-8 input is supported, but this |
|
* may be expanded upon if we receive other examples. |
|
* |
|
* @param string $str |
|
* |
|
* @return string |
|
*/ |
|
static function convertToUTF8($str) { |
|
|
|
$encoding = mb_detect_encoding($str, ['UTF-8', 'ISO-8859-1', 'WINDOWS-1252'], true); |
|
|
|
switch ($encoding) { |
|
case 'ISO-8859-1' : |
|
$newStr = utf8_encode($str); |
|
break; |
|
/* Unreachable code. Not sure yet how we can improve this |
|
* situation. |
|
case 'WINDOWS-1252' : |
|
$newStr = iconv('cp1252', 'UTF-8', $str); |
|
break; |
|
*/ |
|
default : |
|
$newStr = $str; |
|
|
|
} |
|
|
|
// Removing any control characters |
|
return (preg_replace('%(?:[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F])%', '', $newStr)); |
|
|
|
} |
|
|
|
}
|
|
|