SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10.01.2004, 13:43:00
brüllwürfel brüllwürfel ist offline
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 13:48:00 Uhr)
Mit Zitat antworten
  #2  
Alt 10.01.2004, 13:58:21
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
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.
Mit Zitat antworten
  #3  
Alt 10.01.2004, 14:04:56
brüllwürfel brüllwürfel ist offline
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 14:07:34 Uhr)
Mit Zitat antworten
  #4  
Alt 10.01.2004, 14:13:57
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
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;
}
?>
Mit Zitat antworten
  #5  
Alt 10.01.2004, 15:13:36
brüllwürfel brüllwürfel ist offline
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...
Mit Zitat antworten
  #6  
Alt 10.01.2004, 16:43:22
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
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.
Mit Zitat antworten
  #7  
Alt 10.01.2004, 18:18:44
Fuchs Fuchs ist offline
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
Mit Zitat antworten
  #8  
Alt 12.01.2004, 02:21:43
brüllwürfel brüllwürfel ist offline
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($datei50000), ENT_QUOTESISO-8859-1);


switch(
$action) {
    case 
mehr:
        echo 
$text;
break;
    default:
        
$text_umgebrochen wordwrap($text90);
        
$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 02:41:54 Uhr)
Mit Zitat antworten
  #9  
Alt 12.01.2004, 02:30:32
brüllwürfel brüllwürfel ist offline
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 02:34:31 Uhr)
Mit Zitat antworten
  #10  
Alt 12.01.2004, 03:22:25
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:28:15 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt