2012-05-08 3 views
6

Beispiel für eine Variable $ text:Text gliedert sich in die Hälfte, aber im nächsten Satz

Lorem ipsum Karotten, verbesserte Rabatte, aber sie tun occaecat Zeit und Vitalität, wie Arbeit und Fettleibigkeit. Denn wie wir in die minim gekommen sind, die aliquip aus ihr den Vorteil der Übung nostrud wird, so dass Stimulus Anstrengungen, wenn der Schulbezirk und Langlebigkeit. Duis cillum hat will gewesen cupidatat im ein Schmerz in dem Genuss des Schmerzes des Fußballs sein flee verurteilt keine zu zahlen. Excepteur cupidatat Schwarzen sind nicht excepteur, wird auf die Seele beruhigen, die in der sind es die Schuld derer, die die allgemeinen Büros der Snacks verlassen.

Splitting es in der Hälfte,

$half = strlen($text)/2;

wird mich auf "O" -Zeichen in "Fotografie" bekommen.

1: Wie kann die Position der nächsten Satz Trennzeichen (Punkt) auf die Hälfte des Textes finden? In diesem Beispiel ist es 7 Zeichen danach, „oh“.

Auch dieser Text enthält HTML-Code. 1 wollen die HTML ignorieren, wenn der Halbpunkt des Textes herauszufinden, und ignorieren Punkte aus HTML-Attributen usw.

+0

Offensichtlich ändern können Sie wissen, konzeptuell muss was getan werden. 1 sehe das Problem nicht - was Sie versucht haben, und warum hat es nicht funktioniert? –

+1

Was passiert, wenn der nächste Punkt ist * nicht * das Ende des Satzes, z.B. ein Beispiel gegeben? – alex

+0

@ Alex, oooh böse. – JakeParis

Antwort

3

Werfen Sie einen Blick auf substr, strip_tags und strpos. Mit Hilfe von strpos Sie die Position des nächsten Punkt finden und mit strip_tags Sie alle HTML-Tags aus dem Abfeuern abzustreifen.

$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); 

bedenken, dass Sie sicher, dass nach dem Wert von $half ein Punkt existiert machen oder aber die Ausgabe gehen ist nicht das, was Sie sich wünschen.

Vielleicht so etwas?

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

Ihr Satz Unter der Annahme, können mit anderen Zeichen als Punkt enden, könnte man sich folgendermaßen aussehen:

$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); 

Möglicherweise müssen Sie es ein wenig zwicken, aber es sollte es gut Arbeit tun. Für anspruchsvollere Sachen Sie treten in NLP (Natural Language Processing) Gebiet, für die es auch Bibliotheken für PHP verfügbar sind:

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))."..."; 
} 

Diese Funktion

Verwandte Themen