Ben (mümkünse, aksi takdirde bu karakter için kesecek olmalı) tüm sözcükleri dize keser aşağıdaki fonksiyon ile gelip çalışıyorum:
function Text_Truncate($string, $limit, $more = '...')
{
$string = trim(html_entity_decode($string, ENT_QUOTES, 'UTF-8'));
if (strlen(utf8_decode($string)) > $limit)
{
$string = preg_replace('~^(.{1,' . intval($limit) . '})(?:\s.*|$)~su', '$1', $string);
if (strlen(utf8_decode($string)) > $limit)
{
$string = preg_replace('~^(.{' . intval($limit) . '}).*~su', '$1', $string);
}
$string .= $more;
}
return trim(htmlentities($string, ENT_QUOTES, 'UTF-8', true));
}
İşte bazı testler şunlardır:
// Iñtërnâtiônàlizætiøn and then the quick brown fox... (49 + 3 chars)
echo dyd_Text_Truncate('Iñtërnâtiônàlizætiøn and then the quick brown fox jumped overly the lazy dog and one day the lazy dog humped the poor fox down until she died.', 50, '...');
// Iñtërnâtiônàlizætiøn_and_then_the_quick_brown_fox_... (50 + 3 chars)
echo dyd_Text_Truncate('Iñtërnâtiônàlizætiøn_and_then_the_quick_brown_fox_jumped_overly_the_lazy_dog and one day the lazy dog humped the poor fox down until she died.', 50, '...');
Ben ikincisini düşerse olduğu gibi her ikisi de iş, ancak preg_replace()
Ben şu olsun:
Iñtërnâtiônàlizætiøn_and_then_the_quick_brown_fox_jumped_overly_the_lazy_dog and one day the lazy dog humped the poor fox down until she died....
Sadece bayt seviyesinde çalışır ve ben mb_substr()
ATM erişimi yok çünkü substr()
kullanamazsınız, ben birinci ile ikinci regex katılmak için birkaç deneme yaptık bir ama başarılı olamadı.
SMS Lütfen yardım edin, ben neredeyse bir saat için bu ile mücadele ettik.
EDIT: I'm sorry, I've been awake for 40 hours and I shamelessly missed this:
$string = preg_replace('~^(.{1,' . intval($limit) . '})(?:\s.*|$)?~su', '$1', $string);
Yine, birisi bir daha optimize regex (veya sonunda boşluk yok sayar bir) varsa paylaşın lütfen:
"Iñtërnâtiônàlizætiøn and then "
"Iñtërnâtiônàlizætiøn_and_then_"
EDIT 2: I still can't get rid of the trailing whitespace, can someone help me out?
EDIT 3: Okay, none of my edits did really work, I was being fooled by RegexBuddy - I should probably leave this to another day and get some sleep now. Off for today.