dividere una string PHP

Ho trovato questo script php:

// tag strip per evitare di rompere qualsiasi html $ string = strip_tags ($ string);

if (strlen ($ string)> 500) {

// truncate string $stringCut = substr($string, 0, 500); // make sure it ends in a word so assassinate doesn't become ass... $string = substr($stringCut, 0, strrpos($stringCut, ' ')).'... <a href="/this/story">Read More</a>'; } echo $string; 

creare da webbiedave. Ora la mia domanda è: come posso specificare i valori per trovare lo spazio o il punto?

Quindi, se limiti la string a 22 e se avessi qualcosa come StackOverFlow è il miglior sito in assoluto -> produrrà StackOverFlow è il … e se avessi qualcosa come http://stackoverflow.com è il miglior sito di sempre – > uscirà solo … perché non trova spazio e lunghezza della string> 22. Come posso modificare questo script per tagliare il text se trovi un punto nella string in modo che http://stackoverflow.com sia il miglior sito di sempre – -> diventa http: // stackoverflow …?

Vorrei controllare la string dalla fine, perché è necessario eliminare le parole che sono incomplete. La condizione di questa parola incompleta è quando la string breve non termina con lo spazio o con un carattere finale come '!' o semplicemente punto. La prossima cond è vedere se il segno +1 dopo la fine della string è anche tale carattere. Se è il Devi solo del carattere da fine a spazio successivo. Questo potrebbe essere fatto da regexp (qualcosa di simile a / [: alfa] + $ /, probabilmente dovrebbe essere fatto meglio).

Questo è un modo semplice per fare le cose di base, ma un buon inizio penso.

ESEMPIO di ciò che potrebbe essere:

 function word_wrap_custom($string, $limit){ $oneWord = explode(' ', $string); if(count($oneWord) < 2 ) return $oneWord[0]; $string = substr($string, 0, $limit + 2); $endchar = substr($string, $limit, $limit + 1); $postendchar = substr($string, $limit + 1, $limit + 2); $arrAccetpEndChar = arrays(' ', '!', '?', ',', '.', ';', ':'); if(in_arrays($postendchar, $arrAccetpEndChar) || in_arrays($endchar, $arrAccetpEndChar)) { return $string; } else { return preg_replace('/[A-Za-z0-9]+$/', '', $string); } } 

Se desideri dividere ciò senza rompere le parole, ma rispettando i limiti della linea, usa il wordwrap invece di qualsiasi altro metodo split.

 $longText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut purus a tellus ultrices vulputate. Aliquam posuere facilisis elit ut adipiscing. Nunc auctor dignissim port. Vestibulum vitae tempor augue. Nam vel odio quis quam gravida ultrices sed a arcu. Phasellus nec odio massa. Duis imperdiet rutrum mi, vitae volutpat nulla convallis quis. Donec dignissim pulvinar mauris id molestie. Duis id mauris augue, id sagittis velit. Ut justo lectus, scelerisque egestas tempor et, facilisis vitae erat. Quisque ut mattis nulla. Donec a justo quis nisi tempus ultrices. Phasellus non dui non dolor tristique tincidunt vitae imperdiet libero. Pellentesque pretium luctus sem."; $makeLine = wordwrap( $longText, 50, PHP_EOL ); echo $makeLine; 

Prima e dopo: http://codepad.org/Dqz8qzAy

Se si desidera solo la prima row, forse come text di sintesi, è ansible esplodere la string risultante e spostare il primo risultato fuori dall'arrays risultante:

 $longText = "..."; $makeLine = wordwrap( $longText, 50, '\r\n' ); $firstSen = arrays_shift( explode( '\r\n', $makeLine ) ); echo $firstSen; // Lorem ipsum dolor sit amet, consectetur adipiscing... 

Questo su non romperà le parole:

 function ShortenText($text, $chars) { $chars = $chars;$text = $text." "; $countchars = strlen($text); if($countchars > $chars) { $text = substr($text,0,$chars); $text = substr($text,0,strrpos($text,' ')); $text = $text."..."; } return $text; }