10/10/2018, 09:35

cắt chuỗi có sử dụng tiếng việt PHP

mình muốn sử dụng hàm substr() để cắt chuỗi nhưng không thể được, dữ liệu lưu trong Database nó hiển thị như thế này:
& # 50500;& # 48288;& # 53356;& # 47212;& # 48708; & # 54000; ...
(giữa &# không có khoảng trống)

do vậy khi mình thực hiện hàm substr() để lấy ra 15 kí tự thì kết quả là 아&#48288 tương đương vớ 2 kí tự khi hiển thị lên web.

mình có dùng hàm utf8_encode() nhưng vẫn không thể thực hiện cắt trên chuỗi này được
itmanvn viết 11:51 ngày 10/10/2018
try
Code:
function utf8_substr($str,$from,$len){
	return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       '$1',$str);
}
hoặc là:

Code:
function html_cutstr ($str, $len)
{
   if (!preg_match('/\&#[0-9]*;.*/i', $str))
   {
       $rVal = strlen($str, $len);
       break;
   }

   $chars = 0;
   $start = 0;
   for($i=0; $i < strlen($str); $i++)
   {
       if ($chars >= $len)
       break;

       $str_tmp = substr($str, $start, $i-$start);
       if (preg_match('/\&#[0-9]*;.*/i', $str_tmp))
       {
           $chars++;
           $start = $i;
       }
   }
   $rVal = substr($str, 0, $start);
   if (strlen($str) > $start)
   $rVal .= " ...";
   return $rVal;
}
Vh81 viết 11:40 ngày 10/10/2018
mẫu số 1 không sử dụng được, vẫn không cắt được số từ theo mong muốn.

mẫu số 2 có 2 lỗi:
- Warning: Wrong parameter count for strlen() in ($rVal = strlen($str, $len)
- Fatal error: Cannot break/continue 1 level in
COTTONBELLY viết 11:48 ngày 10/10/2018
Bạn nên dùng những hàm iconv_* hoặc mbstring_* trong PHP sẽ tốt hơn.
satthuhuydiet viết 11:38 ngày 10/10/2018
lấy ký tự tới hết khoản trắng thì mới không bị mất từ.
function cut_string($str,$len,$more){
if ($str=="" || $str==NULL) return $str;
if (is_array($str)) return $str;
$str = trim($str);
if (strlen($str) <= $len) return $str;
$str = substr($str,0,$len);
if ($str != "") {
if (!substr_count($str," ")) {
if ($more) $str .= " ...";
return $str;
}
while(strlen($str) && ($str[strlen($str)-1] != " ")) {
$str = substr($str,0,-1);
}
$str = substr($str,0,-1);
if ($more) $str .= " ...";
}
return $str;
}
Vh81 viết 11:38 ngày 10/10/2018
đã được rồi, cám ơn các bạn
songpham viết 11:42 ngày 10/10/2018
ồh , hay quá, cảm ơn bạn
Bang Nguyen viết 15:00 ngày 18/05/2022

satthuhuydiet Đúng ý mình đang tim. Thanks bác

Bài liên quan
0