Toon posts:

[PHP] WordWrap & Empty Posts niet toelaten

Pagina: 1
Acties:
  • 131 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ok ik heb een script geschreven dat enigzins functioneerd als messageboard http://kerberos.gabber.org/newzgroup.php. Alles werkt perfect alleen zijn er twee dingetjes die mij niet lukken en ik op geen mogelijkheid voor elkaar kan krijgen.
1.) De layout kan worden verkloot als mensen een tekst zonder spaties posten dus: oooooooooooooooooooo(etc.)
2.) als mensen alleen maar enters in het invoer veld zetten, wordt er een lege post geplaatst.

Op allebei de problemen heb ik geen antwoord kunnen vinden, de wordwrap functie in PHP doesn't do the trick, en ik denk dat die tweede met een regex zou moeten kunnen worden opgelost... maar hoe??

trouwens als mensen enters posten worden die omgezet in <br> tags dus geen /n of /r ofzo...

alvast bedankt!

  • Kresh
  • Registratie: Mei 2000
  • Laatst online: 02-03 09:27
2. if(trim($text) == '') echo "leeg";

hth

Verwijderd

Topicstarter
Op vrijdag 16 november 2001 13:00 schreef Kresh het volgende:
2. if(trim($text) == '') echo "leeg";

hth
nee dat klopt niet, dat is alleen wanneer mensen spaties hebben ingevoerd, dat handel ik natuurlijk wel af ;) het gaat erom dat mensen nog steeds een zooi enters kunnen invoeren zodat er een heleboel <br> <br> <br> tags staan, zodat zelfs als je trim() zou uitvoeren het lijkt alsof er wel degelijk inhoud is

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Op vrijdag 16 november 2001 13:03 schreef Jaap3 het volgende:

[..]

het gaat erom dat mensen nog steeds een zooi enters kunnen invoeren zodat er een heleboel <br> <br> <br> tags staan, zodat zelfs als je trim() zou uitvoeren het lijkt alsof er wel degelijk inhoud is
Eerst trimmen, dan pas de text naar html omzetten. Dan blijkt de tekst leeg, toch?

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Verwijderd

Topicstarter
Op vrijdag 16 november 2001 14:14 schreef bigtree het volgende:

[..]

Eerst trimmen, dan pas de text naar html omzetten. Dan blijkt de tekst leeg, toch?
shit ja... dat klopt... dat had ik zelf ook nog wel kunnen bedenken... ik deed het ook bij $name, maar blijkbaar dus niet bij $message... stom stom stom...

nou hopen dat iemand me nog kan helpen met het eerste probleempje :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

probleempje 1 => oplossingen

• Je zou met een regexp een maximale hoeveelheid dezelfde karakters achter elkaar kunnen stellen:

!!!!!!!!!!!!!!!!!!!!!!
wordt
!!!
ofzo


• Na wordwrap kijken of er nog regels zijn die langer zijn dan toegestaan, en die gewoon "brute" afkappen (al dan niet met een koppelteken)

• Je zou zelfs nog ergens een spelling-parser oid op kunnen zoeken wat op de juiste manier afbreekt. (weinig kans +veel werk, gok ik)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Op vrijdag 16 november 2001 14:35 schreef drm het volgende:
probleempje 1 => oplossingen

• Je zou met een regexp een maximale hoeveelheid dezelfde karakters achter elkaar kunnen stellen:

!!!!!!!!!!!!!!!!!!!!!!
wordt
!!!
ofzo

nou dat wordt denk ik ook nogal moeilijk aangezien er nog steeds dingen als wqerwqrwqrwqfcvcqetwqcdrewyre tot het oneindige aan elkaar gepost zouden kunnen worden. En voor de rest zijn lange regels wel toegestaan (de browser wrapt toch automagisch) alleen geen absurd lange woorden. Misscien moet ik iedere entry gaan exploden en dan voor ieder array waarde characters gaan tellen ofzow... eens kijken hoe dat moet

[edit] ff geklooid
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$array = explode(" ", $message);
for($i ="0"; $i < sizeof($array); $i++) {
echo "$array[$i]";
echo strlen($array[$i]);
echo "<br>";
} 

echo "<hr>";

$message = implode(" ", $array);
echo $message;
?>

ik zal later eens kijken of ik dit kan implementeren :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Die eerste mogelijkheid
• Je zou met een regexp een maximale hoeveelheid dezelfde karakters achter elkaar kunnen stellen:
was om dan geen afgebroken regels te krijgen met
!!!!!!!!!!!!!!!!!!!!!-
!!!!!!!!

;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
code:
1
2
3
4
5
<?
    $string = "blaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaat";
    $string = preg_replace("_(.)\\1{3,}_", "\\1\\1\\1", $string);
    echo $string;
?>

resultaat: 'blaaat'

  • Snikker
  • Registratie: Oktober 2001
  • Niet online
Deze doet het erg leuk, misschien een beetje overdone voor jou, maar naja, misschien heb je er wel wat aan, heb et ergens gevonden op php.net:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
?php
/* word_wrap($string, $cols, $prefix)
 *
 * Takes $string, and wraps it on a per-word boundary (does not clip
 * words UNLESS the word is more than $cols long), no more than $cols per
 * line. Allows for optional prefix string for each line. (Was written to
 * easily format replies to e-mails, prefixing each line with "> ".
 *
 * Copyright 1999 Dominic J. Eidson, use as you wish, but give credit
 * where credit due.
 */
    function word_wrap ($string, $cols = 80, $prefix = "") {

    $t_lines = split( "\n", $string);
      $outlines = "";

    while(list(, $thisline) = each($t_lines)) {
        if(strlen($thisline) > $cols) {

        $newline = "";
        $t_l_lines = split(" ", $thisline);

        while(list(, $thisword) = each($t_l_lines)) {
            while((strlen($thisword) + strlen($prefix)) > $cols) {
            $cur_pos = 0;
            $outlines .= $prefix;

            for($num=0; $num < $cols-1; $num++) {
                $outlines .= $thisword[$num];
                $cur_pos++;
            }

            $outlines .= "\n";
            $thisword = substr($thisword, $cur_pos, (strlen($thisword)-$cur_pos));
            }

            if((strlen($newline) + strlen($thisword)) > $cols) {
            $outlines .= $prefix.$newline."\n";
            $newline = $thisword." ";
            } else {
            $newline .= $thisword." ";
            }
        }

        $outlines .= $prefix.$newline."\n";
        } else {
        $outlines .= $prefix.$thisline."\n";
        }
    }
    return $outlines;
    }
?>

Lijflied = CryptoMo - Hodl, Hodl


Verwijderd

Topicstarter
OK ik heb dus nu dit gemaakt
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$message = trim($message);
$message = stripslashes($message);
$array = preg_split("/[\s,]+/", $message); //kijkt waar spaties en enters staan en gooit dan alle woorden los in een array
for($i="0"; $i < sizeof($array); $i++) {
$length = strlen($array[$i]);
    if ("$length" >= "100"){
        $array[$i]= substr($array[$i], 0, 5) . "..." . substr($array[$i], $length-5, $length);
    }
    echo "$array[$i] $length <br>";
} 

echo "<hr>";

$message = implode(" ", $array);
echo $message;
?>

werkt goed. Maar één probleem... het terug inmekaar zetten van de string is niet naar mijn zin... nu komen er spaties tussen alle woorden, ook waar eerst enters (of zelfs dubbele enters stonden)... bestaat er een manier om dit ooit nog goed te krijgen... ikzelf heb de moed al een beetje opgegeven...

edit:
moet moet met een d, ik vind inmekaar wel een woord :)

  • Jasper
  • Registratie: Juni 1999
  • Laatst online: 16-09 14:42
Op donderdag 22 november 2001 17:23 schreef Jaap3 het volgende:
.. terug inmekaar zetten ..
.. terug in elkaar zetten ..
Op donderdag 22 november 2001 17:23 schreef Jaap3 het volgende:
.. heb de moet ..
.. heb de moed ..

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Op donderdag 22 november 2001 17:39 schreef Jasper het volgende:

[..]

.. terug in elkaar zetten ..
[..]

.. heb de moed ..
pcies.

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Hehe sorry... dat moet is wel errug dom..
maar voor de rest... daar ging het nu niet om toch?

Verwijderd

Topicstarter
jammer er wordt wel gereageerd op mijn spelfouten maar inhoudelijk... niemand een idee?

edit:
ik zag al dat mensen in mijn echt nieuwsgroep ginnen klooien.. das niet de bedoeling... de testpagina voor deze functie is http://kerberos.gabber.org/fakenewzgroup.php

Verwijderd

Topicstarter
-overbodig-

Verwijderd

Topicstarter
-overbodig-

Verwijderd

Topicstarter
hehehe, na nog meer klooien heb ik nu eindelijk voor elkaar!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?
$maxwords =  1000;
$maxchars =  150;
echo "<html><head></head><body>";
$message = trim($message);
$message = stripslashes($message);
$message = nl2br($message);
$array = preg_split("/[\s]/",$message);
$words = count($array);
if ($words >= $maxwords+1){
        $array = array_slice ($array, 0, $maxwords);
        $array[$maxwords+1] = "<br> <small>this message was truncated because it exceeded the $maxwords words boundary</small>";
}
for($i="0"; $i < sizeof($array); $i++) {
$length = strlen($array[$i]);
    if ($length >= $maxchars+1){
        $array[$i]= substr($array[$i], 0, 5) . "..." . substr($array[$i], $length-5, $length);
    }
    echo "$array[$i] $length <br>";
} 

echo "<hr>";

$message = implode(" ", $array);
$message = str_replace("<br>", "\n", $message);
$message = stripslashes($message);
$message = htmlspecialchars($message, ENT_QUOTES);
$message = str_replace("&amp;amp;amp;amp;amp;", "&amp;amp;amp;amp;", $message);
$message = str_replace("&amp;amp;amp;amp;lt;small&amp;amp;amp;amp;gt;this message was truncated because it exceeded the 10 words boundary&amp;amp;amp;amp;lt;/small&amp;amp;amp;amp;gt;", "<small>this message was truncated because it exceeded the $maxwords words boundary</small>", $message);
$message = preg_replace("/(\015\012)|(\015)|(\012)/"," <br>",$message); //convert line breaks to <br>

echo $message;
echo "<br>$words";
echo "</body></html>";
?>

er wordt nu niet alleen op woord lengte gekort maar ook op het aantal woorden... ziet deze code er een beetje goed uit? Of heeft iemand nog verbeteringen?

Verwijderd

Topicstarter
-Laat Maar-

Verwijderd

Topicstarter
-overbodig-

edit:
oeps perongeluk quote reactie inplaats van edit :)
Pagina: 1