当前不少网站的缺省编码方式为 GB2312 或 UTF8. 因为这个地球上装有 GB2312 这种编码格式的电脑不如装有 UTF8 编码格式的电脑多, 所以推荐网站编码格式均为 UTF8. 对于 UTF8 字符串的操作, PHP 内置的默认字符串操作函数结果有时是不正确的, 尤其是对像汉字这样的文字. 因此, 对 UTF8 格式的字符串要常用 mb_xxx() 之类的函数. 但用起来又不怎么方便. 因此, 特整理一些常用的函数备大家参考.
这是最常用到的一些函数. 大家如果有其它需求, 欢迎在下方留下要增加的内容. 以使其不断完善, 为 PHPer 更好地服务.
<?php
/**
* 常用UTF-8字符串操作类
* @author Shelley Shyan
* @copyright http://phparch.cn
*/
class UTF8 {
public static $encoding = 'UTF-8';
/**
* 是不是有效的 UTF8 字符串
* @param string $str
* @return integer
*/
public function valid ($str) {
return (preg_match('/^.{1}/us', $str, $ar) == 1);
}
/**
* UTF8 编码的字符串长度
* 两种返回结果一样.
* @param string $str
* @return integer
*/
public function strlen ($str) {
//return preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $matches);
return mb_strlen($str, self::$encoding);
}
/**
* 要搜索的字符串的位置 (左侧开始)
* @param string $str
* @param string $search 要搜索的字符串,要用valid 检查
* @param integer $offset 起始位置
* @return mixed 成功时为整数,失败时为false
*/
public function strpos ($str, $search, $offset = false) {
if(strlen($str) && strlen($search)) {
if ( $offset === false ) {
$offset = 0;
}
return mb_strpos($str, $search, $offset, self::$encoding);
} else return false;
}
/**
* 取子字符串
* @param string $str
* @param integer $offset 左端起的UTF-8起点
* @param integer $length UTF-8 字符串长度
* @return mixed 字符串或 false
*/
public function substr ($str, $offset, $length = false) {
if ($length === false) {
return mb_substr($str, $offset, self::strlen($str), self::$encoding);
} else {
return mb_substr($str, $offset, $length, self::$encoding);
}
}
/**
* 字符串翻转
* @param string $str
* @return string
*/
public function strrev ($str) {
preg_match_all('/./us', $str, $ar);
return join('', array_reverse($ar[0]));
}
}
?>
下面是使用示例:
<?php
// 演示字符串
$str = '你好,PHP 架构网。<i>Hi</i>';
echo 'UTF8字符串: '. UTF8::valid($str)
. '<br />长度: '. UTF8::strlen($str)
. '<br />位置: '. UTF8::strpos($str, '架')
. '<br />子串: '. UTF8::substr($str, 3, 6);
?>
上面的示例结果如下:
UTF8字符串: 1
长度: 20
位置: 7
子串: PHP 架构
欢迎大家推荐更多的常用函数, 以便为大家提供更多的帮助. 