<?php
define(
'CHARSET'
,
'UTF-8'
);
function
cutstr(
$string
,
$length
,
$dot
=
"..."
) {
if
(
strlen
(
$string
)<=
$length
) {
return
$string
;
}
if
(
strtolower
(CHARSET) ==
"utf-8"
) {
$n
=
$tn
=
$noc
= 0;
while
(
$n
<
strlen
(
$string
)) {
$t
= ord(
$string
[
$n
]);
if
(
$t
== 9 ||
$t
== 10 || (32 <=
$t
&&
$t
<= 126)) {
$tn
= 1;
$n
++;
$noc
++;
}
elseif
(194 <=
$t
&&
$t
<= 223) {
$tn
= 2;
$n
+= 2;
$noc
+= 2;
}
elseif
(224 <=
$t
&&
$t
<= 239) {
$tn
= 3;
$n
+= 3;
$noc
+= 2;
}
elseif
(240 <=
$t
&&
$t
<= 247) {
$tn
= 4;
$n
+= 4;
$noc
+= 2;
}
elseif
(248 <=
$t
&&
$t
<= 251) {
$tn
= 5;
$n
+= 5;
$noc
+= 2;
}
elseif
(
$t
== 252 ||
$t
== 253) {
$tn
= 6;
$n
+= 6;
$noc
+= 2;
}
else
{
$n
++;
}
if
(
$noc
>=
$length
) {
break
;
}
}
if
(
$noc
>
$length
) {
$n
-=
$tn
;
}
$strcut
=
substr
(
$string
, 0,
$n
);
}
else
{
for
(
$i
= 0;
$i
<
$length
;
$i
++) {
$strcut
.= ord(
$string
[
$i
])>127 ?
$string
[
$i
].
$string
[++
$i
] :
$string
[
$i
];
}
}
$pos
=
strrpos
(
$strcut
,
chr
(1));
if
(
$pos
!== false) {
$strcut
=
substr
(
$strcut
,0,
$pos
);
}
return
$strcut
.
$dot
;
}
$string
=
'测试数据库ablci102020@(#)!)!测试劳动力ddk'
;
echo
cutstr(
$string
,15);