2012-07-11 17 views
72

मैं अपने MySQL डेटाबेस में एक विवरण क्षेत्र है, और मैं दो भिन्न पृष्ठों पर डेटाबेस का उपयोग, एक पृष्ठ मैं पूरे क्षेत्र दिखाया जाएगा, लेकिन अन्य पर, मैं सिर्फ करना चाहते हैं पहले 50 अक्षर प्रदर्शित करें। यदि वर्णन फ़ील्ड में स्ट्रिंग 50 वर्णों से कम है, तो यह नहीं दिखाएगी ..., लेकिन यदि यह नहीं है, तो मैं दिखाऊंगा ... पहले 50 वर्णों के बाद।जोड़ें ... यदि स्ट्रिंग बहुत लंबी पीएचपी

उदाहरण (पूर्ण स्ट्रिंग):

Hello, this is the first example, where I am going to have a string that is over 50 characters and is super long, I don't know how long maybe around 1000 characters. Anyway this should be over 50 characters now ... 

उदाहरण के 2 (पहले 50 अक्षर):

Hello, this is the first example, where I am going ... 
+1

के संभावित डुप्लिकेट [पीएचपी - एक्स पात्रों के बाद एक तार काट] (http://stackoverflow.com/प्रश्न/3161816/php-cut-a-string-after-x-characters) – iconoclast

+0

मैं बस यह इंगित करना चाहता हूं कि एक इलिप्सिस एक चरित्र है: '...'! = '...' और & hellip के रूप में दर्शाया गया है; –

+0

MySQL आपके फ़ील्ड को सब्सक्राइब करने की क्षमता प्रदान करता है, और इलिप्सिस के लिए आप इस मामले का उपयोग कर सकते हैं: चयन करें (केस जब LENGTH (फ़ील्ड)> 50 तब CONCAT (सबस्ट्रिंग (फ़ील्ड, 1, 47), '...') अन्यथा फ़ील्ड एंड) ... – MediaVince

उत्तर

212

ऐसा करने का पीएचपी रास्ता सरल है:

$out = strlen($in) > 50 ? substr($in,0,50)."..." : $in; 

लेकिन आप इस सीएसएस के साथ बहुत अच्छा प्रभाव प्राप्त कर सकते हैं:

.ellipsis { 
    overflow: hidden; 
    white-space: nowrap; 
    text-overflow: ellipsis; 
} 

अब, मान लें कि तत्व की एक निश्चित चौड़ाई है, ब्राउज़र स्वचालित रूप से टूट जाएगा और ... आपके लिए जोड़ देगा।

+9

+1 सीएसएस विकल्प – Tchoupi

+2

के लिए मुझे लगता है कि सीएसएस तरीका स्थानांतरित डेटा बढ़ाएगा, मोबाइल ब्राउज़र के लिए वांछित नहीं। और भी, आप पूर्ण पाठ भेजते हैं, जबकि कुछ बार यह उपलब्ध नहीं होना चाहिए। – szamil

+8

सीएसएस विकल्प के साथ मुझे मिली मुख्य समस्या यह है कि यह multiline के लिए काम नहीं करता है। यदि आपके 50 वर्ण 2 लाइनों से अधिक लपेटते हैं, तो अच्छी तरह से दूसरी पंक्ति में अलविदा कहें। जब तक कोई विकल्प नहीं है तब तक मुझे अभी तक नहीं मिला है? * होप्स * –

11
if (strlen($string) <=50) { 
    echo $string; 
} else { 
    echo substr($string, 0, 50) . '...'; 
} 
2
<?php 
function truncate($string, $length, $stopanywhere=false) { 
    //truncates a string to a certain char length, stopping on a word if not specified otherwise. 
    if (strlen($string) > $length) { 
     //limit hit! 
     $string = substr($string,0,($length -3)); 
     if ($stopanywhere) { 
      //stop anywhere 
      $string .= '...'; 
     } else{ 
      //stop on a word. 
      $string = substr($string,0,strrpos($string,' ')).'...'; 
     } 
    } 
    return $string; 
} 
?> 

मैं ऊपर कोड स्निपेट कई एक बार ..

1
<?php 
$string = 'This is your string'; 

if(strlen($string) > 50) { 
    $string = substr($string, 0, 50) . '...'; 
} 

यह है कि का उपयोग करें।

25

उपयोग wordwrap() शब्द तोड़ने यदि स्ट्रिंग 50 वर्णों से अधिक है बिना स्ट्रिंग काटना, और बस अंत में ... जोड़ें:

$str = $input; 
if(strlen($input) > 50) { 
    $str = explode("\n", wordwrap($input, 50)); 
    $str = $str[0] . '...'; 
} 

echo $str; 

अन्यथा, समाधान है कि substr($input, 0, 50); शब्द टूट जाएगा इस्तेमाल करते हैं।

+0

यह समाधान भी अच्छा है, इसलिए मुझे शब्दों को तोड़ने की ज़रूरत नहीं है ... धन्यवाद। –

+0

अच्छा, धन्यवाद! –

+2

एनबी कि वर्डवाप मल्टीबाइट वर्णों के साथ काम नहीं करता है और इसमें कोई बेक्ड-इन mb_wordwrap फ़ंक्शन नहीं है। – MarcGuay

1
$string = "Hello, this is the first example, where I am going to have a string that is over 50 characters and is super long, I don't know how long maybe around 1000 characters. Anyway this should be over 50 characters know..."; 

if(strlen($string) >= 50) 
{ 
    echo substr($string, 50); //prints everything after 50th character 
    echo substr($string, 0, 50); //prints everything before 50th character 
} 
0

आप इस

$str = "Hello, this is the first example, where I am going to have a string that is over 50 characters and is super long, I don't know how long maybe around 1000 characters. Anyway this should be over 50 characters know..."; 
$split = str_split($str, 50); 
$final = $split[0] . "..."; 
echo $final; 
105

के लिए str_split() उपयोग कर सकते हैं आप इस तरह से भी में वांछित ट्रिम प्राप्त कर सकते हैं:

mb_strimwidth("Hello World", 0, 10, "..."); 

कहाँ:

  • Hello World: स्ट्रिंग काटने छांटने के लिए।
  • 0: स्ट्रिंग की शुरुआत से वर्णों की संख्या।
  • 10: ट्रिम किए गए स्ट्रिंग की लंबाई।
  • ...: छंटनी की स्ट्रिंग के अंत में एक अतिरिक्त स्ट्रिंग।

यह Hello W... वापस आ जाएगा।

सूचना है कि 10 छोटा कर दिया स्ट्रिंग + जोड़ा स्ट्रिंग की लंबाई है!

प्रलेखन: http://php.net/manual/en/function.mb-strimwidth.php

+3

सीएसएस एक विकल्प नहीं है जब निश्चित रूप से सबसे आसान समाधान। – Guillochon

+4

सुरुचिपूर्ण समाधान। जैसा कि [इन टिप्पणियों] में देखा गया है (http://php.net/manual/en/function.define.php)। कटा हुआ पाठ और इलिप्सिस के बीच पिछली जगह को रोकने के लिए, आप आरआरटीआईएम (mb_strimwidth ($ string, 0, 24)) का उपयोग करना चाह सकते हैं। "..." –

+1

सीएसएस के रूप में सर्वश्रेष्ठ विकल्प IMHO बहुत अच्छा है लेकिन AJAX के लिए कभी-कभी आप चाहते हैं कम से कम संभव डेटा का आदान-प्रदान करने के लिए! – MediaVince

2

मैं अपनी वेबसाइट पर इस समाधान का उपयोग करें। यदि $ str $ 500 से छोटा है, तो यह अपरिवर्तित रहेगा। यदि $ str के पहले $ अधिकतम वर्णों में कोई स्थान नहीं है, तो इसे $ अधिकतम स्थिति में क्रूरता से काट दिया जाएगा। अन्यथा अंतिम बिंदु के बाद 3 बिंदु जोड़े जाएंगे।

function short_str($str, $max = 50) { 
    $str = trim($str); 
    if (strlen($str) > $max) { 
     $s_pos = strpos($str, ' '); 
     $cut = $s_pos === false || $s_pos > $max; 
     $str = wordwrap($str, $max, ';;', $cut); 
     $str = explode(';;', $str); 
     $str = $str[0] . '...'; 
    } 
    return $str; 
} 
1

इस शब्द के आधार पर अंडाकार के साथ एक दिया स्ट्रिंग वापस आ जाएगी अक्षरों के स्थान पर गिनती:

<?php 
/** 
* Return an elipsis given a string and a number of words 
*/ 
function elipsis ($text, $words = 30) { 
    // Check if string has more than X words 
    if (str_word_count($text) > $words) { 

     // Extract first X words from string 
     preg_match("/(?:[^\s,\.;\?\!]+(?:[\s,\.;\?\!]+|$)){0,$words}/", $text, $matches); 
     $text = trim($matches[0]); 

     // Let's check if it ends in a comma or a dot. 
     if (substr($text, -1) == ',') { 
      // If it's a comma, let's remove it and add a ellipsis 
      $text = rtrim($text, ','); 
      $text .= '...'; 
     } else if (substr($text, -1) == '.') { 
      // If it's a dot, let's remove it and add a ellipsis (optional) 
      $text = rtrim($text, '.'); 
      $text .= '...'; 
     } else { 
      // Doesn't end in dot or comma, just adding ellipsis here 
      $text .= '...'; 
     } 
    } 
    // Returns "ellipsed" text, or just the string, if it's less than X words wide. 
    return $text; 
} 

$description = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quibusdam ut placeat consequuntur pariatur iure eum ducimus quasi perferendis, laborum obcaecati iusto ullam expedita excepturi debitis nisi deserunt fugiat velit assumenda. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt, blanditiis nostrum. Nostrum cumque non rerum ducimus voluptas officia tempore modi, nulla nisi illum, voluptates dolor sapiente ut iusto earum. Esse? Lorem ipsum dolor sit amet, consectetur adipisicing elit. A eligendi perspiciatis natus autem. Necessitatibus eligendi doloribus corporis quia, quas laboriosam. Beatae repellat dolor alias. Perferendis, distinctio, laudantium? Dolorum, veniam, amet!'; 

echo elipsis($description, 30); 
?>