Avatar billede tangveje Nybegynder
20. februar 2003 - 13:27 Der er 8 kommentarer og
1 løsning

Problem med formatering af tekst

Jeg har følgende lille funktion... Ganske simpelt skulle man mene. Det er en del af et lille forum hvor indlæg skal formateres.

function formatText( $t ) {
    $t = wordwrap( $t, 80, "\n", 1 ) ;

    $t = htmlspecialchars( $t ) ;

    $t = str_replace( " ", " ", $t ) ;

    $t = nl2br( $t ) ;
       
    return $t ;
}

Wordwrap bruger jeg for at undgå at lange linier bryder det lag det er placeret i.


$t = str_replace( " ", "&nbsp;", $t ) ; bruger jeg for at beholde indryk i indlægget, f.eks. hvis der er kodestumper som skal vises korrekt. Har prøvet med <pre> tagget istedet, men det gør at alt teksten står på en lang linie.

Funktionen virker, så længe min side er sat til en fixed width, og jeg bruger en monospaced font. For det første ønsker jeg ikke at bruge en fixed width, men vil gerne kunne sætte sidens bredde til f.eks. 90%... Derudover giver den monospaced font et problem med at hvis jeg via browseren forstørrer teksten bryder teksten det lag det er placeret i, istedet for at blive brudt.

I det hele taget er der altid et eller andet galt med den funktion uanset hvordan jeg laver den. Synes efterhånden jeg har prøvet alle mulige og umulige sammensætninger, men der er altid noget galt. Den nuværende er det bedste jeg har formået ind til videre.

Jeg ønsker ikke at bruge samme løsning som her på eksperten med overflow : auto ; så teksten bare forsvinder hvis den ikke kan være i laget. Det synes jeg er totalt grimt, så ikke noget med at foreslå det vel :)

Jeg ved jeg har gjort det her før, for lang tid siden, uden nogen problemer, og derfor irriterer det mig at jeg ikke kan få en ordentlig løsning nu. Håber derfor nogen ligger inde med en løsning der virker, og uden underlige bivirkninger.
Avatar billede ohmish Nybegynder
20. februar 2003 - 15:08 #1
$tekst = mysql_escape_string(htmlspecialchars(stripslashes($tekst)));
$tekst = wordwrap($tekst, 80, ' ', 1);

put det ind et sted før du smider det i databasen.
har ikke testet præcis denne variant, men noget lign. bruger jeg selv, og det virker.
Avatar billede ohmish Nybegynder
20. februar 2003 - 15:12 #2
læg ud med KUN at gøre ovenstående. så ka du altid tilpasse med ekstra funktioner.
Avatar billede ohmish Nybegynder
20. februar 2003 - 15:13 #3
hvad er en monospaced font om jeg må spørge? :)
Avatar billede tangveje Nybegynder
20. februar 2003 - 15:22 #4
Hmm, vil helst lave den formatering når teksten vises, frem for når det proppes i databasen. Men jeg kan vist ikke helt få den til at passe ind

Og en monospaced font er en font hvor alle bogstaver og tegn er præcist lige brede... Nødvendigt for at jeg kan regne med 80 tegn per linie i wordwrap() ellers får jeg et meget mystisk resultat. Et eksempel :

Hello World
WWWWWWWWWWW

Hvis ellers jeg ikke tager fejl bruges der ikke en monospaced font her på eksperten, derfor vil den nederste linie være længere end den øverste på trods af at der er 11 tegn i dem begge... Bruges en monospaced font vil de 2 linier være lige lange
Avatar billede rosted Nybegynder
20. februar 2003 - 15:23 #5
En font hvor alle karaktererne er lige brede, f.eks. courier
Avatar billede rosted Nybegynder
20. februar 2003 - 15:23 #6
Undskyld :)
Avatar billede ohmish Nybegynder
20. februar 2003 - 17:00 #7
ok. prøv alligevel at formatere inden du smider teksten i db'en. ellers ved jeg ik hvordan du ka gøre. men tak for infoen om monospace :)
Avatar billede tangveje Nybegynder
20. februar 2003 - 18:22 #8
OK, har fået bikset noget sammen der ser ud til at være acceptabelt... Bliver nok ikke bedre

Men tak for hjælpen :)
Avatar billede ohmish Nybegynder
20. februar 2003 - 19:23 #9
var så lidt :)

bruger du mit forslag?
jeg har selv rodet en del med det, og var ved at få grå hår.. indtil jeg brugte ovenst. og det virker for. lange ord blir breaket, pladsen blir fyldt ud og marginer holdes. (+teksten er mysql og tags-valideret).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester