လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MB_StrCut function ကို HTML စာသားကိုကြားဖြတ်ရန်မည်သို့အသုံးပြုရမည်နည်း

MB_StrCut function ကို HTML စာသားကိုကြားဖြတ်ရန်မည်သို့အသုံးပြုရမည်နည်း

gitbox 2025-05-29

1 ။ mb_strcut ၏အခြေခံအသုံးပြုမှု

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 လုံးကိုကြားဖြတ်ခြင်းနှင့်ညီသည်။

2 ။ အဘယ်ကြောင့် HTML code ကိုတိုက်ရိုက်ဝင်ရောက်ရှင်းလင်းရေးအတွက်အမှားတစ်ခုဖြစ်စေသနည်း

HTML code တစ်ခုရှိသည်ဆိုပါစို့။

 <?php
$html = "<p>ဒါ<strong>စမ်းသပ်မှု</strong>ကြိုး。</p>";

MB_StrCut နှင့်တိုက်ရိုက်ဆက်သွယ်ပါက၎င်းသည် tag အလယ်တွင်ဖြတ်သန်းနိုင်သည်။

 $cut = mb_strcut($html, 0, 15, "UTF-8");
echo $cut;

၎င်းသည် <p> ဤကဲ့သို့သောမပြည့်စုံသော tags များပြုလုပ်နိုင်သည်။

3 ။ ဖြေရှင်းချက်စိတ်ကူးများ

  1. ပထမ ဦး စွာ HTML ကိုလွင်ပြင်စာသားထဲသို့ထည့် ပြီး Plain Text Content ကိုကြားဖြတ်ရန် MB_StrCut ကို သုံးပါ။

  2. ကြားဖြတ်စာသားအရှည်အရမူလ HTML သို့ပြန်ပို့ပါ

  3. HTML ဖွဲ့စည်းပုံပြီးပြည့်စုံစေရန်သေချာစေရန် tags များကို fix ။

ဤလုပ်ငန်းစဉ်သည်အတော်လေးရှုပ်ထွေးသည်။ များသောအားဖြင့်ကျွန်ုပ်တို့သည်ရှိပြီးသားစာကြည့်တိုက်များကို အသုံးပြု. ပုံမှန်အသုံးအနှုန်းများဖြင့်သာပြုလုပ်သည်။

4 ။ နမူနာကုဒ်အကောင်အထည်ဖော်မှု

အောက်ဖော်ပြပါနမူနာကုဒ်သည် 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 ဖြင့်အစားထိုးထားသည်။

5 ။ အကျဉ်းချုပ်

  • MB_StrCut သည် Byte-byte encoded strings ၏ byte ကြားဖြတ်ရန်သင့်တော်သည်။

  • HTML code ကိုတိုက်ရိုက်ကြားဖြတ်ခြင်းသည်မပြည့်စုံသော tags များကိုအလွယ်တကူပို့ဆောင်နိုင်သည်။

  • ရိုးရိုးစာသားကို ဦး စွာပြုလုပ်ရန်လိုအပ်ပြီး HTML သို့ချိတ်ဆက်ရန်လိုအပ်သည်။

  • တည်ဆောက်ပုံကိုစောင့်ရှောက်ရန်အနီးကပ် unclesed တံဆိပ်များကိုပိတ်ပါ။

ပိုမိုရှုပ်ထွေးသော HTML Interception အတွက်အထူး HTML parsing စာကြည့်တိုက် ( domdocument ကဲ့သို့ Domdocument Library) ကိုအသုံးပြုရန်အကြံပြုသည်။