2012-05-08 9 views
6

Esempio di una variabile $ text: carote ipsumtesto suddiviso in mezzo, ma la frase più vicino

Lorem, sconti migliorate, ma lo fanno tempo occaecat e vitalità, come il lavoro e l'obesità. Per come si è giunti alla minim, che nostrud aliquip fuori dalla sua il vantaggio di esercizio, in modo che gli sforzi di stimolo se il distretto scolastico e la longevità. Duis cillum è stato cupidatat vuole essere un dolore al piacere del dolore del calcio nel flee condannano senza a pagare. Excepteur neri cupidatat non sono excepteur, è calmante per l'anima, che sono nella è colpa di coloro che abbandonato gli uffici del generale degli spuntini.

divisione a metà,

$half = strlen($text)/2;

mi otterrà il carattere "O" in "fotografia".

1: Come riesce a trovare la posizione del delimitatore pena più vicino (punto) per la metà del testo? In questo esempio è 7 caratteri dopo che, "oh".

Anche questo testo contiene codice HTML. 1 vuole ignorare il codice HTML quando trovare il mezzo punto del testo, e ignorare i punti da dentro gli attributi HTML ecc

+0

Chiaramente si sa concettualmente ciò che deve essere fatto. 1 non vedo il problema - che cosa hai provato e perché non ha funzionato? –

+1

Che cosa succede se la prossima dot * non * è la fine della frase, per esempio un esempio dato? – alex

+0

@alex, oooh malvagio. – JakeParis

risposta

3

Date un'occhiata a substr, strip_tags e strpos. Con l'aiuto di strpos a trovare la posizione del successivo punto e con strip_tags si striscia tutti i tag HTML dalla cottura.

$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumt.'; 
$string = strip_tags($string); 
$half = intval(strlen($string)/2); 
echo substr($string, 0, strpos($string, '.', $half)+1); 

considerare che è necessario assicurarsi che un punto esiste dopo il valore di $half altrimenti l'uscita non sta per essere ciò che desideri.

Forse qualcosa di simile?

if (strpos($string, '.', $half) !== false) 
    echo substr($string, 0, strpos($string, '.', $half)+1); 
else 
    echo substr($string, 0, $half) . '...'; 
2

Supponendo che la tua frase può terminare con caratteri diversi da periodo, si potrebbe guardare a questo:

$s = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; 

// find center (rounded down) 
$mid = floor(strlen($s)/2); 
// find range of characters from center that are not ?, ! or . 
$r = strcspn($s, '.!?', $mid); 

// remember to include the punctuation character 
echo substr($s, 0, $mid + $r + 1); 

Potrebbe essere necessario modificare un po ', ma si dovrebbe fare bene il suo lavoro. Per le cose più avanzati si sta calpestando in PNL (elaborazione del linguaggio naturale) il territorio, per i quali ci sono anche le librerie disponibili per PHP:

http://sourceforge.net/projects/nlp/

-2
function abbrevia($str, $maxChars) { $limit=$maxChars; 
    if (strlen($str)<=$maxChars) return $str; 
    else while ($str[$limit]!=" " && $str[$limit]!="." && $str[$limit]!=";" && $str[$limit]!="," && $str[$limit]!="!" && $str[$limit]) $limit++; 
    return substr($str,0,($limit))."..."; 
} 

È possibile modificare questa funzione

Problemi correlati