要求是:
multibyte language
字符,例如ş
,ı
,ğ
UTF-8
读者知道代码有效,但我不是专家。我相信通过更高效或更深思的编码可以实现相同的目标。 正如您所看到的,代码没有安全问题,只有在输入字符串超过允许值时才会对其进行操作。
问候
答案 0 :(得分:0)
// PrintBrief : Only introduction words (brief) are printed, multibyte safe
// IMPORTANT: assumed that no tag has been used in input string
// output's last word be a meaningful word, no need to worry about erroneous multibyte slicing
// $str : string input string to be written briefly
// $max_chars : number if string is longer than $max_chars, only first $max_chars will be the source string
// $encoding : string multibyte encoding
function PrintBrief ($str , $max_chars = ALLOWED_NUM_OF_CHARS, $encoding = "UTF-8")
{
mb_regex_encoding($encoding);
mb_internal_encoding($encoding);
if ( mb_strlen($str , $encoding) > $max_chars )
{
$str = mb_substr($str , 0 , $max_chars , $encoding);
$w = array();
$w = mb_split(' ',$str);
$k = array_pop($w);
$k = trim(implode(' ', $w));
$punc = array(';' , ',');
for ( $i = 1 ; $i <= count($punc) ; $i++ )
{ $k = rtrim($k , $punc[$i] ); }
return $k.' ...';
}
else
{
return $str;
}
}
示例用法:
$str = 'şğıöç İĞŞ ĞŞĞŞ Öİ ÇÇ Orta Amerika\'nın en büyük ülkesi Nikaragua\'nın başkenti Managua dün sabaha karşı büyük bir patlamayla sarsıldı. Olayın, şehre düşen ufak bir meteroit sonucu açılan krater çukurundan kaynaklandığı anlaşıldı. 1 milyon 200 bin kişinin yaşadığı ve bünyesinde ulsulararası bir havalimanının da olduğu şehre meteorit düşmesi sonucu, sürpriz bir şekilde can veya mal kaybı yaşanmadı ancak 12 metre çapında bir krater çukuru açıldı ve patlama neredeyse şehrin tamamında hissedildi.';
用ALLOWED_NUM_OF_CHARS = 300设置调用后
echo PrintBrief ($str);
输出是:
şğıöçİĞŞĞŞĞŞÖİÇÇOrtaAmerika'nınenbüyükülkesiNikaragua'nınbaşkentiManaguadünsabahakarşıbüyükbirpatlamaylasarsıldı。 Olayın,şehredüşenufakbir meteroitsonucuaçılankraterçukurundankaynaklandığıanlaşıldı。 1 milyon 200binkişininyaşadığıvebünyesindeulsulararasıbir...