bebeboutik/modules/hipay/mapi/mapi_utf8.php
Srv Bebeboutik 6c0978166c add modules
2016-01-04 12:49:26 +01:00

70 lines
1.5 KiB
PHP
Executable File

<?php
class HIPAY_MAPI_UTF8
{
/**
* Test si une chaine est en UTF-8
*
* @param string $string
* @return boolean
*/
public static function is_utf8($string) {
// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
/**
* Encode une chaine en UTF-8 si elle ne l'est pas déjà
*
* @param string $string
* @return string
*/
public static function forceUTF8($string) {
if (!self::is_utf8($string))
return utf8_encode($string);
else
return $string;
}
/**
* Longueur d'une chaine UTF-8
*
* @param string $str
* @return int longueur de la chaine
*/
public static function strlen_utf8 ($str) {
$i = 0;
$count = 0;
$len = strlen ($str);
while ($i < $len)
{
$chr = ord($str[$i]);
$count++;
$i++;
if ($i >= $len)
break;
if ($chr & 0x80)
{
$chr <<= 1;
while ($chr & 0x80)
{
$i++;
$chr <<= 1;
}
}
}
return $count;
}
}