CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
10.01.2004, 12:43:00
|
Anfänger
|
|
Registriert seit: Jan 2004
Beiträge: 8
|
|
PHP 4.2.3 word count alternative && trim?
Arbeite als Gast auf externem Apache-Server (PURETEC, PHP 4.2.3.) und kann somit die PHP Version nicht beeinflussen...
Problematik:
Brauche die Möglichkeit die Ausgabe eines Strings zu beschneiden, ähnlich wie bei substr(); nur das substr() halt bei einem Fließtext logischer Weise auch gnadenlos mitten im Wort abschneiden wird (Bits Counting). Das ist für mich unbefriedigend :-)
str_word_count() hieße die Antwort auf den ersten Teil der Frage, wenn man Einfluß auf die PHP Version hätte :-) - tja pech für mich ...
Nun gibt es im Manual verschiedenste String Funktionen (PHp 4.2) die mich darauf schließen lassen, dass es über einen Umweg dennoch geht, zumal dies viele große Portals schon lange Zeit nutzen um ihre News im "Mainframe" abgekürzt darzustellen. Hier mal ne Gedankenskizze eines Non-Programmers, wie weit ich damit theoretisch gekommen bin, vielleicht habt ihr ja einen Source Code Ansatz für mich ???
a) $text Auszählen von Leerzeichen && Ausgabe $text bis $Anzahl "Leerzeichen"
b) Auszählen von Zeichen wie "." (Punkt) && Ausgabe $text bis $Anzahl "Punkte" (macht sich gut um zu sagen man will nur bis zum zweiten Satz oder so ausgeben)
Nun gibt es wie gesagt String Funkionen, die in der Lage sind die Auszählung der Sonderzeichen zu übernehmen, aber wie dann weiter... das brächte uns zum 2.Problem: Wie schneide ich den String während der Ausgabe aber unter diesen Bedingungen ab? substr() hat seine eigenen Bedingungen und Eine Schleife ist wohl kaum möglich, da ich sonst jedes Bit einzeln ausgeben müsste... Könnte ich z.B. irgendwie den Datenzeiger auf die Position des zweiten gesuchten Zeichens setzen und von dort den davor liegenden Teil eines Strings ausgeben?
Vielen Dank für jeden konstruktiven Beitrag,
Brüll Löwe, Brüll
Geändert von brüllwürfel (10.01.2004 um 12:48:00 Uhr)
|
10.01.2004, 12:58:21
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
Re: PHP 4.2.3 word count alternative && trim?
Zitat:
Original geschrieben von brüllwürfel
Brauche die Möglichkeit die Ausgabe eines Strings zu beschneiden, ähnlich wie bei substr(); nur das substr() halt bei einem Fließtext logischer Weise auch gnadenlos mitten im Wort abschneiden wird (Bits Counting). Das ist für mich unbefriedigend :-)
|
Du suchst word_wrap()
string wordwrap ( string str [, int width [, string break [, int cut]]])
Bricht die Zeilen des Strings str an der mittels width angegebenen Position um. Diese Zeilenumbrüche werden mit dem im (optionalen) Parameter break spezifizierten Steuerzeichen durchgeführt.
Die Funktion wordwrap() bricht die Zeilen automatisch an der Spalte 75 unter Verwendung des Steuerzeichens 'n' (neue Zeile) um, wenn die optionalen Parameter width und / oder break nicht angegeben sind.
Steht cut auf 1, wird der String immer an der vorgegebenen Länge umgebrochen. Ist ein Wort also länger als die gegebene Länge, wird der Zeilumbruch auch innerhalb des Wortes eingefügt (siehe zweites Beispiel).
Anmerkung: Der optionale Parameter cut wurde in PHP 4.0.3 eingeführt.
|
10.01.2004, 13:04:56
|
Anfänger
|
|
Registriert seit: Jan 2004
Beiträge: 8
|
|
wordwrap() ? //hatte ich im Manual auch schon gemustert, aber...
Hmm... wahrscheinlich überseh ich da was mit meiner mangelnden Kombinationsfähigkeit bezügl. Programmiersprachen:
Ich wollte nicht umbrechen sondern weglassen/Ausgabe begrenzen (trimmen)... Davon abgesehen will ich ja mehrere Zeilen darstellen können. Ich geh erstmal davon aus daß du meine Problematik eventl. falsch verstanden hast weil ich kann mir darauf nichts zusammenreimen.
Trotzdem Danke
Geändert von brüllwürfel (10.01.2004 um 13:07:34 Uhr)
|
10.01.2004, 13:13:57
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
Zitat:
Original geschrieben von brüllwürfel
wordwrap() ? //hatte ich im Manual auch schon gemustert, aber...
Ich wollte nicht umbrechen sondern weglassen/Ausgabe begrenzen (trimmen)... Davon abgesehen will ich ja mehrere Zeilen darstellen können. Ich geh erstmal davon aus daß du meine Problematik eventl. falsch verstanden hast weil ich kann mir darauf nichts zusammenreimen.
Trotzdem Danke
|
Du mußt das kombinieren.
Im ersten Arbeitsgang erstellst Du Zeilen, die max so lang sind, wie der Text, den Du darstellen willst. Und aus dem Ergebnis machst Du ein Array, von dem Du nur den ersten Index nimmst. Beispiel:
PHP-Code:
<?php
function short_text ($text)
{
if (strlen($text)<200) return $text;
// erst mal die segensreiche Funktion wordwrap nutzen
$text = wordwrap($text,200,"n",0);
// in Zeilen zerlegen. jede zeile hat jetzt max 200 Zeichen.
$text = explode("n",$text);
// da wir nur die erste Zeile benötigen:
$text = $text[0];
return $text;
}
?>
|
10.01.2004, 14:13:36
|
Anfänger
|
|
Registriert seit: Jan 2004
Beiträge: 8
|
|
Zitat:
Du mußt das kombinieren.
Im ersten Arbeitsgang erstellst Du Zeilen, die max so lang sind, wie der Text, den Du darstellen willst.
|
... genau da liegt das Problem, denn Bedingung ist die Einschränkung des Fließtextes in der Originaldarstellung. Ich brauch etwas, was den Text der einfach "fließend" geschrieben ist (Fließtext) kontrollieren kann. oder hab ichs immernoch nicht gerafft... ??
PS: Bin erst heut abend wieder online...
Dank dir trotzdem erstmal...
|
10.01.2004, 15:43:22
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
Zitat:
Original geschrieben von brüllwürfel
... genau da liegt das Problem, denn Bedingung ist die Einschränkung des Fließtextes in der Originaldarstellung. Ich brauch etwas, was den Text der einfach "fließend" geschrieben ist (Fließtext) kontrollieren kann. oder hab ichs immernoch nicht gerafft... ??
|
Letzteres. Laß Dich von dem n nicht irre machen. Es geht in dem Scriptbeispiel nur darum, aus einer Tüte voll Text nur die ersten 200 Zeichen so rauszufischen, daß das letzte Wort vollständig bleibt.
|
10.01.2004, 17:18:44
|
Junior Member
|
|
Registriert seit: Jul 2003
Beiträge: 182
|
|
Du brauchst eigentl. eine Funktion die aehnlich wie strpos() ist nur dass du als 3 Parameter nicht das Offset bestimmen kannst sondern das wievielte Zeichen er finden soll. Sprich: Die Funktion sucht nicht nach dem ersten vorkommen des Strings und liefert die die Position sondern sucht nach dem x'ten Vorkommen des Strings und liefert dir die Position.
Generell beschneidet das einen String auf die laenge 200+ ohne ein Wort abzuschneiden:
echo substr($str, 0, strpos($str, ' ', 200));
Nun brauchtest du eine Funktion ala:
echo substr($str, 0, strcountpos($str, '.', 3));
Das dir die ersten 3 Saetze ausgibt.
Solch eine Funktion koennte so aussehen:
PHP-Code:
<?php
function strcountpos($haystack, $needle, $num) {
for ($i = 0, $offset = 0;
$i < $num;
$i++, $offset++) {
$offset = strpos($haystack, $needle, $offset);
}
return $offset;
}
HTH Andre
|
12.01.2004, 01:21:43
|
Anfänger
|
|
Registriert seit: Jan 2004
Beiträge: 8
|
|
Vielen Dank für die Mühe und den Denkanstoß...
Benötige das Ganze für ein Newspage "look", wo die News erst einmal aufgelistet werden und die jeweils ersten Worte des Artikels neugierig machen sollen. Hab mich jetzt durch PHP durchgequält und habe meine ersten Resultate: Also habe es jetzt mit euren Anregungen wie folgt gelöst und es funktioniert auch (Beispiel erstmal mit fopen() später mit dbconnect() usw :D ) :
PHP-Code:
<?php
$datei = fopen("text.txt","r");
$text = htmlentities(fgets($datei, 50000), ENT_QUOTES, ISO-8859-1);
switch($action) {
case mehr:
echo $text;
break;
default:
$text_umgebrochen = wordwrap($text, 90);
$zeilen_von_text = explode ("n", $text_umgebrochen);
echo $zeilen_von_text[0] . " |...<a href="newstest.php?action=mehr">mehr</a>";
break;
}
fclose($datei);
?>
Habt ihr eventuelle Kritikpunkte? btw: --->>> das mit dem Punkt ist genial, muß ich aber erst noch wirklich verstehen, dann setz ich es ein.
PS: ... Die Frage die sich mir aber noch stellt ist ob das der richtige Lösungsansatz ist wenn ich das als Routine für alle zukünftigen Artikel aus der DB (in dem Falle:mySQL) brauche?
Geändert von brüllwürfel (12.01.2004 um 01:41:54 Uhr)
|
12.01.2004, 01:30:32
|
Anfänger
|
|
Registriert seit: Jan 2004
Beiträge: 8
|
|
Fuchs, du verdienst deinen Namen zu recht! Ich habs begriffen. Das nenn' ich "Eine Sprache kennen und sie sich gefügig machen" :)... Danke, werd mich gleich ans Einsetzen und Testen machen.
MfG
Geändert von brüllwürfel (12.01.2004 um 01:34:31 Uhr)
|
12.01.2004, 02:22:25
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
Zitat:
Original geschrieben von brüllwürfel
Habt ihr eventuelle Kritikpunkte?
|
Ja.
1. Charset muß ein String sein
2. Switch kennt nur Gleichheit
3. die Konstante mehr ist nicht definiert
4. die Buchstabenzählung muß vor htmlentities() stattfinden. Ein ü ist ein Zeichen ein & uuml; sind 6 Zeichen.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:31:41 Uhr.
|