2014-12-26 8 views
7

मेरे पास मेरी वेबसाइट में एक टिप्पणी प्रणाली है और कुछ उपयोगकर्ता 500 से अधिक वर्णों से बहुत लंबी टिप्पणियां लिखते हैं और मुझे 200 के बाद इसे काटने की आवश्यकता है और "अधिक देखें" विकल्प जोड़ें। समस्या यह है कि उपयोगकर्ता <a>test</a> टैग का उपयोग कर सकते हैं और कुछ मामलों में 200 वर्णों की सीमा मध्य में टैग को घटाती है, जैसे <a>t या <a या <a>test</ यदि ऊपर दिए गए किसी भी मामले में, सीमा को HTML टैग के अंत तक बढ़ाया जाना चाहिएएचटीएमएल के अंत में टैग को समाप्त करने वाला टैग

function truncate($string,$length=200,$append="&hellip;") { 
    $string = trim($string); 

    if(strlen($string) > $length) { 
    $string = wordwrap($string, $length); 
    $string = explode("\n", $string, 2); 
    $string = $string[0] . $append; 
    } 

    return $string; 
} 

किसी भी विचार कैसे इस बनाने के लिए: तो पूर्व <a>test</a>

मैं इस कोड है?

धन्यवाद

+0

लिखें एक अलग समारोह tagCatcher समारोह में लिखने कि इस्तेमाल किया जा सकता टैग का एक सेट के लिए एक त्वरित जांच (पूरे पाठ पारित)। यदि आप टैग का ट्रैक रखने के लिए डेटाबेस का उपयोग करते हैं तो आप केवल एक क्वेरी कर सकते हैं। बस एक सुझाव एक जवाब नहीं है। आपके फ़ंक्शन में आप 200 अक्षरों की गणना कर सकते हैं और फिर '<' के लिए कुछ जांच कर सकते हैं यदि उसके पास कोई संबंधित /> 'तब तक विस्तार न हो जब तक कि यह' /> ' –

+1

न हो, मान लीजिए कि आप इसे केवल उस फ़ंक्शन में लिख सकते हैं । मैं कुछ लिख रहा हूँ। –

+0

क्या आप उपरोक्त कार्यों को जानते हैं? –

उत्तर

4

अच्छा, मुझे लगता है कि मैंने ऐसा किया था। अगर किसी के पास कोई सुझाव है, तो इस उत्तर या टिप्पणी को संशोधित करने के लिए स्वतंत्र महसूस करें।

function cut_text($string,$length=350,$append="&hellip;") { 

    $string = trim($string); 
    $string_length = strlen($string); 

    $original_string = $string; 

    if($string_length > $length) { 

    $remaining_chars = $string_length - $length; 

    if(strpos($string, '<') !== false && strpos($string, '>') !== false) { 

     $string = wordwrap($string, $length); 
     $string = explode("\n", $string, 2); 
     $string = $string[0] . $append; 

     $fillimi = substr_count($string, '<'); 
     $fundi = substr_count($string, '>'); 

     if($fillimi == $fundi) { 
     $string = $string; 
     } else { 
     $i = 1; 
     while($i <= $remaining_chars) { 

      $string = wordwrap($original_string, $length + $i); 
      $string = explode("\n", $string, 2); 
      $new_remaining_chars = $string_length - ($length + $i); 
      if($new_remaining_chars > 0) { 
      $string = $string[0] . $append; 
      } else { 
      $string = $string[0]; 
      } 

      $fillimi = substr_count($string, '<'); 
      $fundi = substr_count($string, '>'); 

      if($fillimi == $fundi) { 
      $string = $string; 
      break; 
      } 

      $i++; 
     } 
     } 

    } else { 
     $string = trim($string); 

     $string = wordwrap($string, $length); 
     $string = explode("\n", $string, 2); 
     $string = $string[0] . $append; 

    } 

    } 

    return $string; 
} 
+0

इसके साथ मेरी एकमात्र समस्या यह है कि यह < and > की संख्या की गणना करता है और यह नहीं कि यह एक टैग है या नहीं। कोई टिप्पणी में <का उपयोग कर सकता है। –

+0

हाँ लेकिन फिर भी यह कोई समस्या नहीं है। मैंने परीक्षण किया और यह पूरी तरह से काम करता है। – zeeks

+1

यह उत्तर है, लेकिन रास्ते में मुद्दों के लिए खाते में अधिक परिभाषित किया जा सकता है। अच्छा कार्य। –

1

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

+0

मुझे लगता है कि यह एक टिप्पणी की जानी चाहिए, यह लिखित शब्द में समाधान था इसलिए मैंने इसे वापस शून्य होने के लिए वोट दिया। –

+0

@KirsKringle: इसके लिए धन्यवाद। मैं इस बात से सहमत हूं कि मुझे इसके लिए और अधिक करना चाहिए था। –

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