很多站长朋友们都不太清楚php截取utf8,今天小编就来给大家整理php截取utf8,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php 中文和编码判断代码 2、 PHP里截取替换utf-8的网页里的中文文字时,为什么替换不了? 3、 php 截取utf-8格式的字符串实例代码 4、 PHP 如何截取标题长度 (utf-8编码)? 5、 请问下php怎么处理截取字符串出现的乱码问题 6、 PHP如何获取中文字符串长度 utf8 php 中文和编码判断代码编码范围1.
GBK
(GB2312/GB18030)
\x00-\xff
GBK双字节编码范围
\x20-\x7f
ASCII
\xa1-\xff
中文
\x80-\xff
中文
2.
UTF-8
(Unicode)
\u4e00-\u9fa5
(中文)
\x3130-\x318F
(韩文
\xAC00-\xD7A3
(韩文)
\u0800-\u4e00
(日文)
ps:
韩文是大于[\u9fa5]的字符
正则例子:
preg_replace(”/([\x80-\xff])/”,”",$str);
preg_replace(”/([u4e00-u9fa5])/”,”",$str);
二、代码例子
复制代码
代码如下:
//判断内容里有没有中文-GBK
(PHP)
function
check_is_chinese($s){
return
preg_match('/[\x80-\xff]./',
$s);
}
//获取字符串长度-GBK
(PHP)
function
gb_strlen($str){
$count
=
0;
for($i=0;
$i<strlen($str);
$i++){
$s
=
substr($str,
$i,
1);
if
(preg_match("/[\x80-\xff]/",
$s))
++$i;
++$count;
}
return
$count;
}
//截取字符串字串-GBK
(PHP)
function
gb_substr($str,
$len){
$count
=
0;
for($i=0;
$i<strlen($str);
$i++){
if($count
==
$len)
break;
if(preg_match("/[\x80-\xff]/",
substr($str,
$i,
1)))
++$i;
++$count;
}
return
substr($str,
0,
$i);
}
//统计字符串长度-UTF8
(PHP)
function
utf8_strlen($str)
{
$count
=
0;
for($i
=
0;
$i
<
strlen($str);
$i++){
$value
=
ord($str[$i]);
if($value
>
127)
{
$count++;
if($value
>=
192
$value
<=
223)
$i++;
elseif($value
>=
224
$value
<=
239)
$i
=
$i
+
2;
elseif($value
>=
240
$value
<=
247)
$i
=
$i
+
3;
else
die('Not
a
UTF-8
compatible
string');
}
$count++;
}
return
$count;
}
//截取字符串-UTF8(PHP)
function
utf8_substr($str,$position,$length){
$start_position
=
strlen($str);
$start_byte
=
0;
$end_position
=
strlen($str);
$count
=
0;
for($i
=
0;
$i
<
strlen($str);
$i++){
if($count
>=
$position
$start_position
>
$i){
$start_position
=
$i;
$start_byte
=
$count;
}
if(($count-$start_byte)>=$length)
{
$end_position
=
$i;
break;
}
$value
=
ord($str[$i]);
if($value
>
127){
$count++;
if($value
>=
192
$value
<=
223)
$i++;
elseif($value
>=
224
$value
<=
239)
$i
=
$i
+
2;
elseif($value
>=
240
$value
<=
247)
$i
=
$i
+
3;
else
die('Not
a
UTF-8
compatible
string');
}
$count++;
}
return(substr($str,$start_position,$end_position-$start_position));
}
//判断是否是有韩文-UTF-8
(JavaScript)
function
checkKoreaChar(str)
{
for(i=0;
i<str.length;
i++)
{
if(((str.charCodeAt(i)
>
0x3130
str.charCodeAt(i)
<
0x318F)
||
(str.charCodeAt(i)
>=
0xAC00
str.charCodeAt(i)
<=
0xD7A3)))
{
return
true;
}
}
return
false;
}
//判断是否有中文字符-GBK
(JavaScript)
function
check_chinese_char(s){
return
(s.length
!=
s.replace(/[^\x00-\xff]/g,"**").length);
}
PHP里截取替换utf-8的网页里的中文文字时,为什么替换不了?如果你的PHP文件是UTF-8就应该正常,如果不是就需要iconv进行转换,例如PHP文件是GBK编码的时侯,代码应该这样写:
$pat=iconv('GBK','UTF-8',"/口碑网([\s\S]*?)购站之一/");
$HTML=preg_replace($pat,"",$HTML);
php 截取utf-8格式的字符串实例代码php
截取utf-8格式的字符串
php中,我们经常需要截取字符串。英文字符占用一个字节,中文字符占用两个字节,但中文字符占用两个字节是相对于GBK编码而言但是在时下国际流行的UTF8编码中,一个中文字符占用3个字节。本文章向大家介绍一个php
截取utf-8格式字符串的函数。
举例说明:
function
truncate_utf8_string($string,
$length,
$etc
=
'...')
{
$result
=
'';
$string
=
html_entity_decode
(
trim
(
strip_tags
(
$string
)
),
ENT_QUOTES,
'UTF-8'
);
$strlen
=
strlen
(
$string
);
for($i
=
0;
(($i
<
$strlen)
($length
>
0));
$i
++)
{
if
($number
=
strpos
(
str_pad
(
decbin
(
ord
(
substr
(
$string,
$i,
1
)
)
),
8,
'0',
STR_PAD_LEFT
),
'0'
))
{
if
($length
<
1.0)
{
break;
}
$result
.=
substr
(
$string,
$i,
$number
);
$length
-=
1.0;
$i
+=
$number
-
1;
}
else
{
$result
.=
substr
(
$string,
$i,
1
);
$length
-=
0.5;
}
}
$result
=
htmlspecialchars
(
$result,
ENT_QUOTES,
'UTF-8'
);
if
($i
<
$strlen)
{
$result
.=
$etc;
}
return
$result;
}
如果需要截取utf-8格式的字符串,直接调用这个函数即可。
<?php
$str="如果需要截取utf-8格式的字符串,直接调用这个函数即可。";
echo
truncate_utf8_string($str,10);//输出结果:如果需要截取utf-8格...
?>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
PHP 如何截取标题长度 (utf-8编码)?你可以查询出完整标题,然后用 CSS 的 overflow指定超出部分不显示,在标题中含有中英、数字混合的情况,很难做到字符串排版的宽度一致。
还有最坏的情况,用截断的方法,把实际完整的标题断开,破坏了原义,对SEO是无比的伤害。
用css控制显示长度才是最好的做法。
请问下php怎么处理截取字符串出现的乱码问题利用php内置方法mb_substr截取不乱码;
1、GBK编码截取示例:
$str = '我是谁'; //gbk编码的字符串
echo mb_substr($str, 0, 1, 'gbk'); //输出 我
mb_substr方法比substr多一个参数,用来指定字符串编码。
2、utf-8编码截取示例:
[code]
$str = '我abc是谁'; //utf-8编码的字符串
echo mb_substr($str, 0, 2, 'utf-8'); //输出 我a
[/code]
中英混合也完全没有问题。
PHP如何获取中文字符串长度 utf8PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员。下面简要的剖析一下PHP对中文字符串长度的处理:
PHP自带的函数如strlen()、mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节。例:
$enStr = ‘Hello,China!’;
echo strlen($enStr); // 输出:12
而中文则不然,做中文网站一般会选择两种编码:gbk/gb2312或是utf-8。utf-8能兼容更多的字符,所以受到很多站长的喜爱。gbk与utf-8对中文的编码不同,导致中文在gbk与utf-8编码下所占字节也有差异。
gbk编码下每个中文字符所占字节为2,例:
$zhStr = ‘您好,中国!’;
echo strlen($zhStr); // 输出:12
utf-8编码下每个中文字符所占字节为3,例:
$zhStr = ‘您好,中国!’;
echo strlen($zhStr); // 输出:18
那么如何计算这组中文字符串的长度呢?有人可能会说gbk下获取中文字符串长度除以2,utf-8编码下除以3不就行了吗?但是您要考虑字符串并不老实,99%的情况会以中英混合的情况出现。
这是WordPress中的一段代码,主要思想就是先用正则将字符串分解为个体单元,然后再计算单元的个数即字符串的长度,代码如下(只能处理utf-8编码下的字符串):
$zhStr = ‘您好,中国!’;
$str = ‘Hello,中国!’;
// 计算中文字符串长度
function utf8_strlen($string = null) {
// 将字符串分解为单元
preg_match_all(“/./us”, $string, $match);
// 返回单元个数
return count($match[0]);
}
echo utf8_strlen($zhStr); // 输出:6
echo utf8_strlen($str); // 输出:9
关于php截取utf8的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php截取utf8 PHP截取路径的详细内容...