2011-12-13 11 views
13

मेरे पास मेरे PHP कोड में कुछ स्ट्रिंग हैं जिन्हें बहुत लंबे समय तक छोटा कर दिया जाना चाहिए।PHP में एक यूटीएफ 8 स्ट्रिंग को कैसे छोटा करें?

उदाहरण के लिए यदि एक पाठ कुछ इस तरह है:

हाय, मैं आपको बताना चाहता है कि यह कैसे अद्भुत है चाहते हैं।

यह इस के साथ बदलना होगा:

हाय, मैं चाहते हैं ...

मैं एक साधारण substr किया है कि के लिए। समस्या यह है कि यूटीएफ 8 में कुछ पात्र वास्तव में दो अक्षर लंबे होते हैं। और मुझे मध्य में कटौती करने वाले चरित्र के साथ कुछ समस्याएं आई हैं: उदाहरण के लिए, जब मैं डेटाबेस में संशोधित स्ट्रिंग डालने का प्रयास करता हूं, तो यह क्रैश हो जाता है।

static function short($string, $max = 255){ 
    if(strlen($string) >= $max){ 
     $string = substr($string, 0, $max - 5).'...'; 
    } return $string; 
} 

किसी UTF8 वर्ण के लिए भी इस समारोह काम करने के लिए एक तरह से पता है चाहेंगे:

यहाँ मेरे वर्तमान समारोह है?

+0

क्यों '$ अधिकतम - 5'? – deceze

+0

'https: //api.drupal.org/api/drupal/includes पर एक नज़र डालें! Unicode.inc/function/truncate_utf8/7' –

+0

[यूटीएफ -8 संगत ट्रंकेट फ़ंक्शन] के संभावित डुप्लिकेट (http: // stackoverflow .com/प्रश्न/6288875/utf-8-compatible-truncate-function) – user

उत्तर

7

mb_substr() के साथ प्रयास करें:

static function short($string, $max = 255){ 
    if(mb_strlen($string, 'utf-8') >= $max){ 
     $string = mb_substr($string, 0, $max - 5, 'utf-8').'...'; 
    } return $string; 
} 
+0

-1 गैर-मल्टीबाइट-जागरूक 'strlen' क्यों? – deceze

+0

@deceze - आप सही हैं, thx को इंगित करने के लिए thx - मैंने कॉपी/पेस्ट कोड को सही किया –

संबंधित मुद्दे