php trim函数处理中文乱码case

先看case

<?php
 
// case1. 删除前后括号
$strOldLemmaDesc = "())武器()大师(()";
$strNewLemmaDesc = preg_replace('/^[()()]+|[()()]+$/u', '', $strOldLemmaDesc);
$strNewLemmaDesc2 = trim($strOldLemmaDesc, '()()' ); //badcase
var_dump($strNewLemmaDesc, $strNewLemmaDesc2);
以上输出:
string(16) "武器()大师"
string(15) "武器()大帢
 
// case2.删除末尾句号
$strOldLemmaDesc = "骗局。";
$strNewLemmaDesc = preg_replace('/。+$/u', '', $strOldLemmaDesc);
$strNewLemmaDesc2 = rtrim($strOldLemmaDesc, '。' ); //badcase
var_dump($strNewLemmaDesc, $strNewLemmaDesc2);
以上输出:
string(6) "骗局"
string(5) "骗屢
 
// case3.删除末尾中英文句号、冒号
$strOldCata = "导言.";
$strNewCata = preg_replace('/[.:。:]+$/u', '', $strOldCata);
$strNewCata2 = rtrim($strOldCata, '.:。:');//badcase
var_dump($strNewCata, $strNewCata2);
以上输出:
string(6) "导言"
string(5) "导訢
 

总结

trim(ltrim、rtrim)函数默认只能删除 ASCII (单字节匹配)码中的字符,而不能删除 Unicode 字符,因此在处理非 ASCII 字符时需要格外注意。这里使用了 preg_replace() 函数,通过正则表达式匹配字符(或是字符集合),再将其替换为空字符串,从而达到删除特定字符的效果。注意正则表达式末尾的 'u' 标志用于表示匹配 Unicode 字符集。

综上,这种类似的处理含中文字符串操作建议使用正则函数(preg_replace)匹配和删除。

 
 
posted @ 2024-06-18 16:57  Evergrande_Wang  阅读(167)  评论(0)    收藏  举报