दिलचस्प पोस्ट
आईपी ​​एड्रेस का इस्तेमाल करते हुए टोमकेट तक नहीं पहुंच सकते MySQL ENUM प्रकार बनाम मेजबान एक्सटेंशन पॉपअप विंडो सामग्री को कैसे सहेजना है पर पूरी तरह से खो दिया अक्षर की एक स्ट्रिंग में यूनिकोड एन्कोडिंग के साथ एक स्ट्रिंग कन्वर्ट कैसे करें कैसे CPU उपयोग सी # में प्राप्त करने के लिए? एमुलेटर पर एंड्रॉइड मार्केट ऐप कैसे स्थापित करें? जावा: सरणी के लिए हैशमैप <स्ट्रिंग, ऑब्जेक्ट> कैसे परिवर्तित करें सदस्य फ़ंक्शन के लिए फ़ंक्शन पॉइंटर चहचहाना बूटस्ट्रैप संकुचित प्लगइन दिशा-क्षैतिज के बजाय कार्यक्षेत्र फोरेक का प्रदर्शन, लैम्ब्डा के साथ array_map और स्थिर कार्य के साथ array_map उदाहरण के साथ जावास्क्रिप्ट मॉड्यूल पैटर्न डीबग और रिलीज़ बिल्ड के बीच प्रदर्शन अंतर उपयोगकर्ता नाम और पासवर्ड के साथ कर्ल का उपयोग करना? Httpclient 4, त्रुटि 302. कैसे पुनर्निर्देशित करें? मैं $ PATH कैसे सेट करूं जैसे कि `एसएसयूएच उपयोगकर्ता @ होस्ट कमांड` काम करता है?

स्ट्रिंग से पहले 100 अक्षर प्राप्त करें, पूर्ण शब्दों का आदर करें

मैंने पहले यहां एक समान सवाल पूछा है, लेकिन मुझे यह जानना चाहिए कि क्या यह छोटा सा संभव है। मैं 100 अक्षरों को स्ट्रिंग कम करना चाहता हूं और $small = substr($big, 0, 100); उपयोग करना चाहता हूं $small = substr($big, 0, 100); ऐसा करने के लिए। हालांकि, यह सिर्फ पहले 100 वर्ण लेता है और कोई परवाह नहीं करता कि यह एक शब्द को तोड़ता है या नहीं।

क्या कोई स्ट्रिंग के पहले 100 अक्षरों तक ले जाने के लिए कोई तरीका है लेकिन सुनिश्चित करें कि आप कोई शब्द नहीं तोड़ते हैं?

उदाहरण:

 $big = "This is a sentence that has more than 100 characters in it, and I want to return a string of only full words that is no more than 100 characters!" $small = some_function($big); $small = "This is a sentence that has more than 100 characters in it, and I want to return a string of only" 

PHP का उपयोग कर ऐसा करने का एक तरीका है?

वेब के समाधान से एकत्रित समाधान "स्ट्रिंग से पहले 100 अक्षर प्राप्त करें, पूर्ण शब्दों का आदर करें"

आपको केवल यह करने की आवश्यकता है:

 $pos=strpos($content, ' ', 200); substr($content,0,$pos ); 

हाँ वहाँ है। यह एक फ़ंक्शन है जिसे मैंने एक उपयोगकर्ता से अलग मंचों पर उधार लिया है, इसलिए मैं उसके लिए श्रेय नहीं ले सकता।

 //truncate a string only at a whitespace (by nogdog) function truncate($text, $length) { $length = abs((int)$length); if(strlen($text) > $length) { $text = preg_replace("/^(.{1,$length})(\s.*|$)/s", '\\1...', $text); } return($text); } 

ध्यान दें कि यह स्वचालित रूप से एलीपर्स जोड़ता है, यदि आप नहीं चाहते हैं कि सिर्फ '\\1' को preg_replace कॉल के लिए दूसरे पैरामीटर के रूप में प्रयोग करें।

यदि आप शब्दों को "अंतरिक्ष द्वारा सीमांकित अक्षरों के अनुक्रमों" के रूप में परिभाषित करते हैं … स्ट्रिंग में आखिरी स्थान को खोजने के लिए strrpos() का उपयोग करें, उस स्थिति को कम करें, परिणाम ट्रिम करें

ज़रूर। सबसे आसान शायद preg_match के आसपास एक आवरण लिखना है:

 function limitString($string, $limit = 100) { // Return early if the string is already shorter than the limit if(strlen($string) < $limit) {return $string;} $regex = "/(.{1,$limit})\b/"; preg_match($regex, $string, $matches); return $matches[1]; } 

संपादित करें: हमेशा के लिए अद्यतन नहीं स्ट्रिंग में अंतिम वर्ण के रूप में एक स्थान शामिल हैं

यह फ़ंक्शन किसी शब्द सीमा पर "..." जोड़कर जब भी संभव हो, एक स्ट्रिंग को छोटा करता है। लौटे हुए स्ट्रिंग में "..." की अधिकतम लंबाई $len

 function truncate($str, $len) { $tail = max(0, $len-10); $trunk = substr($str, 0, $tail); $trunk .= strrev(preg_replace('~^..+?[\s,:]\b|^...~', '...', strrev(substr($str, $tail, $len-$tail)))); return $trunk; } 

उदाहरण के आउटपुट:

  • truncate("Thanks for contributing an answer to Stack Overflow!", 15)
    रिटर्न "Thanks for..."
  • truncate("To learn more, see our tips on writing great answers.", 15)
    रिटर्न "To learn more..." (अल्पविराम भी कटौती की गई)
  • truncate("Pseudopseudohypoparathyroidism", 15)
    रिटर्न "Pseudopseudo..."

यह मेरा दृष्टिकोण है, अमीर के जवाब पर आधारित है, लेकिन यह किसी भी शब्द को नकारात्मक ऑफसेट के साथ strrpos () का उपयोग करके, सीमा से अधिक लंबी सीमा नहीं देता।

सरल लेकिन काम करता है मैं Laravel के str_limit () सहायक फ़ंक्शन के रूप में एक ही वाक्यविन्यास का उपयोग कर रहा हूं, अगर आप इसे गैर-लैरवेल परियोजना पर उपयोग करना चाहते हैं

 function str_limit($value, $limit = 100, $end = '...') { $limit = $limit - mb_strlen($end); // Take into account $end string into the limit $valuelen = mb_strlen($value); return $limit < $valuelen ? mb_substr($value, 0, mb_strrpos($value, ' ', $limit - $valuelen)) . $end : $value; } 

यह मेरे लिए ठीक काम करता है, मैं इसे मेरी स्क्रिप्ट में उपयोग करता हूं

 <?PHP $big = "This is a sentence that has more than 100 characters in it, and I want to return a string of only full words that is no more than 100 characters!"; $small = some_function($big); echo $small; function some_function($string){ $string = substr($string,0,100); $string = substr($string,0,strrpos($string," ")); return $string; } ?> 

सौभाग्य

यहाँ पूरे शब्दों के साथ अंत में डाट्स के साथ महान समाधान है

 function text_cut($text, $length = 200, $dots = true) { $text = trim(preg_replace('#[\s\n\r\t]{2,}#', ' ', $text)); $text_temp = $text; while (substr($text, $length, 1) != " ") { $length++; if ($length > strlen($text)) { break; } } $text = substr($text, 0, $length); return $text . ( ( $dots == true && $text != '' && strlen($text_temp) > $length ) ? '...' : ''); } 

इनपुट: किसी भी तरह से काम करने के लिए तैयार किया जाता है, लेकिन वह अपने काम के लिए काम करते हैं और कुछ समय के लिए उन्हें काम करते हैं। एक छोटे से खेतों के लिए, जो कुछ भी नहीं है कि आप अपने कसरत से बचने के लिए कसरत करने के लिए कसरत करने से बचें। डुओस एक खूबसूरत चिड़चिड़ाहट के बारे में पता लगाया गया था कि वह अपने हाथों को खोने के लिए तैयार हो गया था। एक्सीप्टेर के बिना किसी भी कसरत के प्रोजेक्ट का इस्तेमाल नहीं किया जा सकता है, जो कि एन्जिन के लिए इस्तेमाल किया जाने वाला काम है।

आउटरपुट: किसी भी तरह से काम करने के लिए तैयार किया जाता है, लेकिन वह कभी-कभी काम करने के लिए काम करते हैं और किसी भी तरह के काम के रूप में काम करते हैं। कुछ स्थानों पर जाने के लिए, जो कुछ भी नहीं कर रहे हैं …

यह मेरे लिए किया …

 //trim message to 100 characters, regardless of where it cuts off $msgTrimmed = mb_substr($var,0,100); //find the index of the last space in the trimmed message $lastSpace = strrpos($msgTrimmed, ' ', 0); //now trim the message at the last space so we don't cut it off in the middle of a word echo mb_substr($msgTrimmed,0,$lastSpace) 

यहां मेरा समाधान है:

 /** * get_words_until() Returns a string of delimited text parts up to a certain length * If the "words" are too long to limit, it just slices em up to the limit with an ellipsis "..." * * @param $paragraph - The text you want to Parse * @param $limit - The maximum character length, eg 160 chars for SMS * @param string $delimiter - Use ' ' for words and '. ' for sentences (abbreviation bug) :) * @param null $ellipsis - Use '...' or ' (more)' - Still respects character limit * * @return string */ function get_words_until($paragraph, $limit, $delimiter = ' ', $ellipsis = null) { $parts = explode($delimiter, $paragraph); $preview = ""; if ($ellipsis) { $limit = $limit - strlen($ellipsis); } foreach ($parts as $part) { $to_add = $part . $delimiter; if (strlen($preview . trim($to_add)) <= $limit) { // Can the part fit? $preview .= $to_add; continue; } if (!strlen($preview)) { // Is preview blank? $preview = substr($part, 0, $limit - 3) . '...'; // Forced ellipsis break; } } return trim($preview) . $ellipsis; } 

आपके मामले में यह (उदाहरण) होगा:

 $big = "This is a sentence that has more than 100 characters in it, and I want to return a string of only full words that is no more than 100 characters!" $small = get_words_until($big, 100); 
 function truncate ($str, $length) { if (strlen($str) > $length) { $str = substr($str, 0, $length+1); $pos = strrpos($str, ' '); $str = substr($str, 0, ($pos > 0)? $pos : $length); } return $str; } 

उदाहरण:

 print truncate('The first step to eternal life is you have to die.', 25); 

स्ट्रिंग (25) "शाश्वत करने के लिए पहला कदम"

 print truncate('The first step to eternal life is you have to die.', 12); 

स्ट्रिंग (9) "पहले"

 print truncate('FirstStepToEternalLife', 5); 

स्ट्रिंग (5) "प्रथम"

मैं इस प्रश्न को पुन: उठाने के लिए माफी चाहता हूं, लेकिन मैं इस धागा पर ठोकर खाई और एक छोटी सी समस्या पाया। किसी भी व्यक्ति को एक चरित्र की सीमा चाहने के लिए जो आपकी दी गई सीमा से अधिक हो, उन शब्दों को हटा देगा, ऊपर दिए गए उत्तर महान काम करते हैं मेरे विशिष्ट मामले में, मैं एक शब्द प्रदर्शित करना चाहता हूं यदि सीमा शब्द के मध्य में गिरती है मैंने अपने समाधान को साझा करने का फैसला किया है, अगर किसी और को इस कार्यक्षमता की तलाश में है और उन्हें ट्रिम करने के बजाय शब्दों को शामिल करने की आवश्यकता है।

 function str_limit($str, $len = 100, $end = '...') { if(strlen($str) < $len) { return $str; } $str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str)); if(strlen($str) <= $len) { return $str; } $out = ''; foreach(explode(' ', trim($str)) as $val) { $out .= $val . ' '; if(strlen($out) >= $len) { $out = trim($out); return (strlen($out) == strlen($str)) ? $out : $out . $end; } } } 

उदाहरण:

  • इनपुट: echo str_limit('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', 100, '...');
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore...
  • इनपुट: echo str_limit('Lorem ipsum', 100, '...');
  • आउटपुट:
  • इनपुट: echo str_limit('Lorem ipsum', 1, '...');
  • आउटपुट: विज्ञापन Lorem...

यहाँ एक और तरीका है जो आप ऐसा कर सकते हैं

 $big = "This is a sentence that has more than 100 characters in it, and I want to return a string of only full words that is no more than 100 characters!" $big = trim( $big ); $small = $big; if( strlen( $big ) > 100 ){ $small = mb_substr( $small, 0, 100 ); $last_position = mb_strripos( $small, ' ' ); if( $last_position > 0 ){ $small = mb_substr( $small, 0, $last_position ); } } echo $small; 

या

  echo ( strlen( $small ) < strlen( $big ) ? $small.'...' : $small ); 

यह भी बहुस्तरीय सुरक्षित है और यहां तक ​​कि अगर रिक्त स्थान नहीं है, तब भी काम करता है, जिस स्थिति में यह केवल पहले 100 वर्ण वापस करेगा। यह पहले 100 अक्षर लेता है और फिर अंत से छोर तक की निकटतम शब्द सीमांकक की खोज करता है

स्वीकृत उत्तर के साथ समस्या यह है कि परिणाम स्ट्रिंग सीमा से अधिक हो जाती है, अर्थात् यह 100 अक्षर से अधिक हो सकता है क्योंकि strpos ऑफसेट की देखभाल करेगा और आपकी लंबाई हमेशा आपकी सीमा से अधिक होगी यदि आखिरी शब्द लंबा है, तो squirreled बाद आपके परिणाम की लंबाई 111 होगी (आपको एक विचार देने के लिए)

wordwrap फ़ंक्शन का उपयोग करने के लिए एक बेहतर समाधान है:

 function truncate($str, $length = 125, $append = '...') { if (strlen($str) > $length) { $delim = "~\n~"; $str = substr($str, 0, strpos(wordwrap($str, $length, $delim), $delim)) . $append; } return $str; } echo truncate("The quick brown fox jumped over the lazy dog.", 5); 

इस तरह आप यह सुनिश्चित कर सकते हैं कि स्ट्रिंग को आपकी सीमा के नीचे काट दिया जाता है (और कभी भी खत्म नहीं होता)

पीएस यह विशेष रूप से उपयोगी है यदि आप अपने डाटाबेस में छांटे हुए स्ट्रिंग को VARCHAR (50) जैसे एक निश्चित कॉलम के साथ स्टोर करने की योजना बनाते हैं।

पीपीएस वर्ड वर्प में विशेष सीमांकक को नोट करें यह सुनिश्चित करने के लिए है कि आपकी स्ट्रिंग को सही तरीके से छोटा कर दिया गया है, भले ही इसमें नई लाइनें हों (अन्यथा यह पहली नई लाइन में छीनकर जो आप नहीं चाहते हैं)।

वर्ड वर्प फॉर्मेट स्ट्रिंग को सीमा के अनुसार, उन्हें अलग करता है \ n ताकि हमारे पास 50 से कम लाइनें हों, ऑर्ड्स को सीपेटेड स्ट्रैप के अनुसार स्पॉन्स्ट नहीं किया जाता है \ n इसलिए हमारे पास लाइन लिंक्स की सूची से संबंधित सरणी है, पहला एलीमेंट

सूची ($ छोटा) = विस्फोट ("\ n", वर्डड्राप ($ ali, 50));

कृपया Evert , प्रतिनिधि के बाद से मैं टिप्पणी या प्रतिनिधि नहीं कर सकता

यहाँ नमूना रन है

 php > $ali = "ali veli krbin yz doksan esikesiksld sjkas laksjald lksjd asldkjadlkajsdlakjlksjdlkaj aslkdj alkdjs akdljsalkdj "; php > list($short) = explode("\n",wordwrap($ali ,50)); php > var_dump($short); string(42) "ali veli krbin yz doksan esikesiksld sjkas" php > $ali =''; php > list($short) = explode("\n",wordwrap($ali ,50)); php > var_dump($short); string(0) "" 

फिर भी एक और जवाब! मैं अन्य जवाबों से पूरी तरह संतुष्ट नहीं था, और 'हार्ड कटऑफ' चाहता था (यदि अधिकतम संभव हो तो $ max_characters से पहले गारंटीकृत शब्द का ब्रेक), तो यह मेरा योगदान करने के लिए फ़ंक्शन है!

 /** * Shortens a string (if necessary), trying for a non-word character before character limit, adds an ellipsis and * returns. Falls back to a forced cut if no non-word characters exist before. * * @param string $content * @param int $max_characters - number of characters to start looking for a space / break. * @param bool $add_ellipsis - add ellipsis if content is shortened * * @return string */ public static function shorten( $content, $max_characters = 100, $add_ellipsis = TRUE ) { if ( strlen( $content ) <= $max_characters ) { return $content; } // search for non-word characters $match_count = preg_match_all( '/\W/', $content, $matches, PREG_OFFSET_CAPTURE ); // force a hard break if can't find another good solution $pos = $max_characters; if ( $match_count > 0 ) { foreach ( $matches[0] as $match ) { // check if new position fits within if ( $match[1] <= $max_characters ) { $pos = $match[1]; } else { break; } } } $suffix = ( $add_ellipsis ) ? '&hellip;' : ''; return substr( $content, 0, $pos ) . $suffix; } 

## स्ट्रिंग से पहले सीमित वर्ण प्राप्त करें ##

 <?php $content= $row->title; $result = substr($content, 0, 70); echo $result; ?>