<span><span><span class="hljs-title function_ invoke__">mb_internal_encoding</span></span><span>(</span><span><span class="hljs-string">"UTF-8"</span></span><span>); </span><span><span class="hljs-comment">// 設置內部字符編碼</span></span><span>
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">"[,,]+"</span></span><span>; </span><span><span class="hljs-comment">// 匹配英文逗號和中文逗號,一個或多個連續</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_split</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
輸出結果:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => 蘋果
[</span><span><span class="hljs-meta">1</span></span><span>] => 香蕉
[</span><span><span class="hljs-meta">2</span></span><span>] => 橘子
[</span><span><span class="hljs-meta">3</span></span><span>] => 葡萄
[</span><span><span class="hljs-meta">4</span></span><span>] => 西瓜
)
</span></span>
mb_split自動識別了中文逗號,正確地完成了字符串的分割。
在某些複雜場景中,我們希望先判斷字符串中是否存在某種模式,再進行分割。這時可以用mb_ereg :
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">mb_ereg</span></span><span>(</span><span><span class="hljs-string">"[,,]"</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>)) {
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_split</span></span><span>(</span><span><span class="hljs-string">"[,,]+"</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$result</span></span><span> = [</span><span><span class="hljs-variable">$text</span></span><span>]; </span><span><span class="hljs-comment">// 無需分割</span></span><span>
}
</span></span>
這樣做可以避免不必要的分割操作,提高效率。
字符編碼統一:通過mb_internal_encoding("UTF-8")確保函數統一使用UTF-8編碼,避免亂碼。
正則模式書寫: mbstring的正則表達式語法略有不同,注意方括號、轉義字符的正確使用。
性能考慮:對大文本進行多次正則匹配時,結合mb_ereg判斷再分割能提升效率。
通過合理結合mb_ereg和mb_split ,我們可以:
準確處理多字節編碼的字符串分割
靈活支持多種分隔符
在預匹配條件下優化性能
掌握這些技巧,能讓你在處理多語言文本時游刃有餘,避免常見的亂碼和分割錯誤問題。
示例完整代碼:
<span><span><span class="hljs-title function_ invoke__">mb_internal_encoding</span></span><span>(</span><span><span class="hljs-string">"UTF-8"</span></span><span>);
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"蘋果,香蕉,橘子,葡萄,西瓜"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">mb_ereg</span></span><span>(</span><span><span class="hljs-string">"[,,]"</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>)) {
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_split</span></span><span>(</span><span><span class="hljs-string">"[,,]+"</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$result</span></span><span> = [</span><span><span class="hljs-variable">$text</span></span><span>];
}
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
運行後即可得到正確的分割結果。