2010-08-17 19 views
11

वर्तमान में, विधि मैं तार काट-छांट करने के लिए उपयोग है तार छोटा: echo substr($message, 0, 30)."..";पीएचपी: ठीक से साथ ".."

मैं केवल मामले में डॉट्स कि स्ट्रिंग काट दिया गया कैसे दिखाऊं?

+0

सामान्य तीनों के स्थान पर दो बिंदु क्यों? मानदंड से हर विचलन अच्छा नहीं है। यदि आप "खोए" चरित्र की परवाह करते हैं, तो आप * एक * चरित्र में हाइपरबॉलिक एलीपसे (जो तीन बिंदुओं को बुलाया जाता है) हो सकता है, यूनिकोड के लिए धन्यवाद: '...' (माउस के साथ इसे चुनने का प्रयास करें, आप देखें कि यह वास्तव में केवल एक चरित्र है)। –

+0

इसके अलावा, एक हाइपरबॉलिक इलिप्सिस तीन बिंदु या अवधि नहीं है। इलिप्सिस एक पूरी तरह से अलग इकाई है, और तीन बिंदुओं के साथ विली-नली को प्रतिस्थापित नहीं किया जाना चाहिए, क्योंकि दोनों के पास पात्रों के रूप में अलग-अलग गुण होते हैं, और टेक्स्ट में अलग-अलग अंतर भी लेते हैं। इसके बजाए वास्तविक इलिप्सिस-चरित्र का प्रयोग करें। – junkfoodjunkie

उत्तर

15

बस लंबाई की जांच अगर यह 30 से अधिक या वर्ण नहीं है देखने के लिए:

if (strlen($message) > 30) 
{ 
    echo substr($message, 0, 30).".."; 
} 
else 
{ 
    echo $message; 
} 

मुझ में मुद्रण nitpick में जोड़ने के लिए है: उपयोग करने के लिए सही वर्ण अंडाकार जो इस चरित्र शामिल है, तीन डॉट ..., या इसकी HTML इकाई …

+0

हा! आप 18 सेकंड तेज थे :) – sprain

+1

+1 क्योंकि & hellip का उपयोग; – fabrik

+2

(विशेष रूप से @ फ़ैब्रिक और जो भी उसे वोट दे रहा है :) HTML में नामित इकाइयों का उपयोग करके बहिष्कृत किया गया है - ऐसा न करें, क्योंकि (आधुनिक!) ब्राउज़र एक्सएचटीएमएल के साथ एक साथ उपयोग किए जाने पर चकित होंगे। एक बेहतर समाधान हमेशा सही एन्कोडिंग के साथ चरित्र का उपयोग करना है, यानी यूटीएफ -8 या इसी तरह के। लेकिन फिर भी सही प्रतीक का उल्लेख करने के लिए +1। –

5

बस यह देखने के लिए मूल स्ट्रिंग की लंबाई की जांच करें कि इसे छोटा करने की आवश्यकता है या नहीं। यदि यह 30 से अधिक लंबी है, स्ट्रिंग को काटना और अंत पर डॉट्स जोड़ें:

if (strlen($message) > 30) { 
echo substr($message, 0, 30).".."; 
} else { 
echo $message; 
} 
4
if (strlen($message) > 30) { 
    echo substr($message, 0, 30) . ".."; 
} else { 
    echo $message; 
} 
0

एक strlen() हालत जोड़ें

1

आप कर सकता है:

echo strlen($message) > 30 ? substr($message, 0, 30) . '..' : $mssage; 

असल में, यह की तरह है (लेकिन छोटे):

if (strlen($message) > 30) { 
    echo substr($message, 0, 30) . ".."; 
} else { 
    echo $message; 
} 
+0

कम लेकिन यह सादा और सरल अंग्रेजी के विपरीत, यह स्ट्रिंग [आईएनजी] लेन [gth] [30] से अधिक संदेश के विपरीत है। ... ' –

+0

सच है, लेकिन मुझे इस तरह की चीज़ के लिए टर्नरी सिंटैक्स पसंद है। यह बिंदु के लिए छोटा और अधिक है। यह इसके उपयोग के लिए पाठ्यपुस्तक परिदृश्य भी है (शाखाओं को दोनों शाखाओं के साथ "परिणाम" के साथ तर्क) ... – ircmaxell

4

यह ध्यान देने योग्य है कि strlen() फ़ंक्शन वर्ण गिनती नहीं है, यह बाइट्स गिना जाता है। यदि आप यूटीएफ -8 एन्कोडिंग का उपयोग कर रहे हैं तो आप 1 वर्ण के साथ समाप्त हो सकते हैं जिसे 4 बाइट्स तक गिना जाता है। ऐसा करने का उचित तरीका कुछ ऐसा होगा:

echo mb_strlen($message) > 30 ? mb_substr($message, 0, 30) . "..." : $message;