MB_StrCut သည် bytes အတွက် strings ကိုကြားဖြတ်။ MB_Substrcut နှင့်မတူဘဲ MB_Strcutcut သည် bytes အားဖြင့်ကြားဖြတ်နေပြီး Multibyte encoding process လုပ်ရန်အသုံးပြုသည်။
ဥပမာ -
<?php
$str = "ဒီစမ်းသပ်မှု string ကိုဖြစ်ပါတယ်";
echo mb_strcut($str, 0, 6, "UTF-8"); // ထုတ်လုပ်ခြင်း:ဒါ
?>
ဤနေရာတွင် 6 ခုသည် UTF-8 တွင် 3 bytes များနှင့်တရုတ်စာလုံးများသည် 3 bytes များကိုသိမ်းပိုက်ထားသည့်အတွက်ယေဘုယျအားဖြင့် 3 bytes များကိုသိမ်းပိုက်ခြင်းကြောင့်တရုတ်စာလုံး 2 လုံးကိုကြားဖြတ်ခြင်းနှင့်ညီသည်။
HTML code တစ်ခုရှိသည်ဆိုပါစို့။
<?php
$html = "<p>ဒါ<strong>စမ်းသပ်မှု</strong>ကြိုး。</p>";
MB_StrCut နှင့်တိုက်ရိုက်ဆက်သွယ်ပါက၎င်းသည် tag အလယ်တွင်ဖြတ်သန်းနိုင်သည်။
$cut = mb_strcut($html, 0, 15, "UTF-8");
echo $cut;
၎င်းသည် <p> ဤကဲ့သို့သောမပြည့်စုံသော tags များပြုလုပ်နိုင်သည်။
ပထမ ဦး စွာ HTML ကိုလွင်ပြင်စာသားထဲသို့ထည့် ပြီး Plain Text Content ကိုကြားဖြတ်ရန် MB_StrCut ကို သုံးပါ။
ကြားဖြတ်စာသားအရှည်အရမူလ HTML သို့ပြန်ပို့ပါ ။
HTML ဖွဲ့စည်းပုံပြီးပြည့်စုံစေရန်သေချာစေရန် tags များကို fix ။
ဤလုပ်ငန်းစဉ်သည်အတော်လေးရှုပ်ထွေးသည်။ များသောအားဖြင့်ကျွန်ုပ်တို့သည်ရှိပြီးသားစာကြည့်တိုက်များကို အသုံးပြု. ပုံမှန်အသုံးအနှုန်းများဖြင့်သာပြုလုပ်သည်။
အောက်ဖော်ပြပါနမူနာကုဒ်သည် MB_Strcut ကို အသုံးပြု. MB_StrCut ကို အသုံးပြု. သက်ဆိုင်ရာ HTML code ကိုသိမ်းထားရန်ကြိုးစားခြင်းကိုပြသသည်။
<?php
function cutHtmlByTextLength($html, $length, $encoding = "UTF-8") {
// 1. အသုံးပြု strip_tags ရေွှ့ HTML ကပ်တံဆိပ်,စာသားကိုစာသားရယူပါ
$text = strip_tags($html);
// 2. အသုံးပြု mb_strcut byte အရှည်ကိုသတ်မှတ်ရန်လွင်ပြင်စာသားကိုကြားဖြတ်
$cutText = mb_strcut($text, 0, $length, $encoding);
// 3. variable တွေကိုအစပျိုး,အသုံးပြု来存储截取的HTML
$result = '';
$byteCount = 0;
$textPos = 0;
$tagStack = [];
// 4. အသုံးပြု正则匹配 HTML ကပ်တံဆိပ်和文本
preg_match_all('/(<[^>]+>|[^<]+)/', $html, $matches);
foreach ($matches[0] as $segment) {
if ($segment[0] === '<') {
// ကပ်တံဆိပ်段,တိုက်ရိုက်ရလဒ်များကိုထည့်ပါ,并维护ကပ်တံဆိပ်栈以便后续闭合
$result .= $segment;
// 判断是否是开始ကပ်တံဆိပ်,结束ကပ်တံဆိပ်或自闭合ကပ်တံဆိပ်
if (preg_match('/^<\s*\/(\w+)/', $segment, $closeTag)) {
// 结束ကပ်တံဆိပ်,从栈中弹出对应ကပ်တံဆိပ်
$tagName = $closeTag[1];
$lastTag = array_pop($tagStack);
if ($lastTag !== $tagName) {
// မရှိသော,အပြောင်းအလဲနဲ့စဉ်အတွင်းအမှားသည်းခံစိတ်တိုးမြှင့်နိုင်ပါတယ်,ဒါပေမယ့်ဒီမှာရိုးရှင်းစွာလျစ်လျူရှုဖြစ်ပါတယ်
}
} elseif (preg_match('/^<\s*(\w+)[^>]*\/\s*>$/', $segment)) {
// 自闭合ကပ်တံဆိပ်,အဆိုပါ stack ကိုဝင်ရန်မ
} elseif (preg_match('/^<\s*(\w+)/', $segment, $openTag)) {
// 开始ကပ်တံဆိပ်,stack ကိုရိုက်ထည့်ပါ
$tagStack[] = $openTag[1];
}
} else {
// စာသားအပိုဒ်,byte byte ကြားဖြတ်
$segmentBytes = strlen(mb_convert_encoding($segment, "UTF-8", $encoding));
$remaining = $length - $byteCount;
if ($remaining <= 0) {
break; // ရောက်ရှိနေတဲ့အရှည်,ရပ်
}
if ($segmentBytes <= $remaining) {
$result .= $segment;
$byteCount += $segmentBytes;
} else {
// တစ်စိတ်တစ်ပိုင်းကြားဖြတ်စာသား
$partial = mb_strcut($segment, 0, $remaining, $encoding);
$result .= $partial;
$byteCount += strlen(mb_convert_encoding($partial, "UTF-8", $encoding));
break;
}
}
}
// 5. 关闭未闭合的ကပ်တံဆိပ်,အာမခံ HTML ပြီးပြည့်စုံသောဖွဲ့စည်းပုံ
while ($tag = array_pop($tagStack)) {
$result .= "</{$tag}>";
}
return $result;
}
// 示例အသုံးပြု法
$html = '<p>ဒါ<a href="https://gitbox.net/path/to/page">စမ်းသပ်မှု链接</a>,ပါဝင်<strong>ရဲရင့်သောစာသား</strong>နှင့်သာမန်စာသား。</p>';
$cutHtml = cutHtmlByTextLength($html, 30);
echo $cutHtml;
?>
အထက်ပါကုဒ်ကိုပြသသည် -
ပထမ ဦး ဆုံး strip_tags မှတဆင့်လွင်ပြင်စာသားကိုရယူပါ။
MB_STRANCT ကို BYTES တွင် ကြားဖြတ်. ကြားဖြတ်ရန် MB_STRCUT ကို သုံးပါ။
ပုံမှန် HTML နှင့် text အပိုင်းအစများကိုပုံမှန် ခွဲ. ကြားဖြတ်သည့်အရှည်ဖြင့်ပြန်ကွဲနိုင်သည်။
HTML သည်တရားဝင်ဖြစ်ကြောင်းသေချာစေရန် unctated tags များကိုအလိုအလျောက်ပိတ်ပါ။
နမူနာ URL ရှိဒိုမိန်းအမည်ကို GitBox.net ဖြင့်အစားထိုးထားသည်။
MB_StrCut သည် Byte-byte encoded strings ၏ byte ကြားဖြတ်ရန်သင့်တော်သည်။
HTML code ကိုတိုက်ရိုက်ကြားဖြတ်ခြင်းသည်မပြည့်စုံသော tags များကိုအလွယ်တကူပို့ဆောင်နိုင်သည်။
ရိုးရိုးစာသားကို ဦး စွာပြုလုပ်ရန်လိုအပ်ပြီး HTML သို့ချိတ်ဆက်ရန်လိုအပ်သည်။
တည်ဆောက်ပုံကိုစောင့်ရှောက်ရန်အနီးကပ် unclesed တံဆိပ်များကိုပိတ်ပါ။
ပိုမိုရှုပ်ထွေးသော HTML Interception အတွက်အထူး HTML parsing စာကြည့်တိုက် ( domdocument ကဲ့သို့ Domdocument Library) ကိုအသုံးပြုရန်အကြံပြုသည်။