Avatar billede jammerlab Nybegynder
12. januar 2004 - 01:36 Der er 23 kommentarer og
1 løsning

"klip" en string i stykker

Ved der er flere spørgsmål med dette, men jeg har nu stadig problemr. Jeg har en chat og der vil jo sikkert dukke en spam besked op før eller siden så jeg arbejde på problemet nu. Pt. arbejder jeg med følgende:

$row[text] = wordwrap($row[text], 46, "<br>", 2);

men den gør det ikke korrekt. Jeg vil gerne havde den til at klippe beskederne i stykker hvis det er en lang @@@@@@@@@@@@ osv. ikke hvis det bare er en masse ord der fylder 46 altså: dette er en test osv osv.

Get it? :)
Avatar billede jaw Nybegynder
12. januar 2004 - 01:55 #1
str_replace så fjerner den jo det... Men ved ikke om det er det du vil?
Avatar billede nak-m Nybegynder
12. januar 2004 - 04:08 #2
hvad med noget i stil med (ikke testet):

$row[text] = ereg_replace("([^ ]{46})","\\1<br>",$row[text]);
Avatar billede zkn Nybegynder
12. januar 2004 - 12:40 #3
prøv Preg_replace("/(.?+){20+}/i","\\1");
Avatar billede jammerlab Nybegynder
12. januar 2004 - 13:54 #4
Fint fint nak-m ... nu blev det da ihvertfald bedre! Men der er stadig et mindre problem. Når det er en "spam" string som @@@@@@@@@@ så gør den det på følgende måde:

[13:51] Sniper_C:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Altså linje skift efter nicket. Normal text klarer den fint, men hvorfor line break lige der når det er en lang sting?
Avatar billede jaw Nybegynder
12. januar 2004 - 16:56 #5
Det er vel fordi at der ikke er mere plads i din table eller hvad du bruger, og så tager den @@@ som et ord og forsøger ikke at dele det?
Avatar billede nak-m Nybegynder
12. januar 2004 - 18:31 #6
Det er som jaw siger. Jeg har forsøgt at finde en løsning i css, men det er ikke lykkedes mig, så jeg prøver at udtænke noget php.
Avatar billede nak-m Nybegynder
12. januar 2004 - 18:34 #7
ah, jeg er på sporet af noget :)
Avatar billede jaw Nybegynder
12. januar 2004 - 18:37 #8
hehe, gl med det så :) Men er det altid @'er eller tager du bare det som et eksempel?
Avatar billede nak-m Nybegynder
12. januar 2004 - 18:46 #9
Det skulle ganske simpelt løse problemet at skrive &nbsp; i stedet for normalt mellemrum. Jeg har prøvet at bruge nowrap="nowrap", white-space: pre;, white-space: nowrap; bl.a., men det ser ud til at IE har et problem med denne slags (de virker dog i kvalitetsbrowsere som mozilla :)

Den eneste umiddelbare løsning, og den simpleste, er derfor at bruge &nbsp;
Avatar billede jammerlab Nybegynder
12. januar 2004 - 19:24 #10
Altså $row[user osv]&nbsp;$text ?
Avatar billede jaw Nybegynder
12. januar 2004 - 19:30 #11
Nej, f.eks. mit foreslag der vil fjerne @, så laver du enten:
$row[tekst] = str_replace("@", "", $row[tekst]);
$row[tekst] = str_replace("@", "&nbsp", $row[tekst]);

...eller bruger preg_replace eller hvad du nu vil... Sådan set samme model :)
Avatar billede jammerlab Nybegynder
12. januar 2004 - 19:44 #12
Ja men som du selv påpegede så var @ kun et eksempel... en spam msg kan jo være hvilket som helst tegn... det var mere fordi @ fyldere mere end de andre :)
Avatar billede jaw Nybegynder
12. januar 2004 - 19:47 #13
Det havde jeg næsten luret :) Men så tag preg_replace for den mener jeg kan klare alle tegnene, men lad nak-m tage den, han har sikkert testet det :)
Avatar billede nak-m Nybegynder
12. januar 2004 - 21:37 #14
talker:
mht. at den laver uprovokeret linjeskift efter brugernavnet i tilfælde af lange ord, kan du bruge &nbsp; på denne måde:

[13:51&nbsp;Sniper_C:&nbsp;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Hvis det ikke løser resten af dit problem så vend tilbage :)
Avatar billede nak-m Nybegynder
12. januar 2004 - 21:41 #15
Eller du kan gøre ligesom eksperten: bare "clip" i højre side så resten af ordet forsvinder ud af tabellen. Kig ovenfor for at se, hvad jeg mener.
Avatar billede nak-m Nybegynder
12. januar 2004 - 21:46 #16
jaw:
mener du en funktion der bare fjerner hele strengen eller bytter karaktererne ud med white-space :) det kan da ikke hjælpe meget. Man kan selvfølgelig lave en funktion, der laver white-space (af en art) efter et hvis antal karakterer, men jeg tror ikke på, at det kan blive særligt vellykket.
Avatar billede jaw Nybegynder
12. januar 2004 - 21:48 #17
Jamen, hvis det er spam af lame tegn, så er det vel fint at det bare forsvinder?
Og måske du med fordel kunne svare mange indlæg, ved at skrive et i stedet for 3 :)
Avatar billede nak-m Nybegynder
12. januar 2004 - 21:59 #18
jaw:
hvad hvis det ikke er spam? hvordan vil du genkende spam?
Avatar billede jaw Nybegynder
12. januar 2004 - 22:21 #19
Ja jeg ved det godt... Har jo også sagt at min løsning ikke er den bedste...
Avatar billede nak-m Nybegynder
12. januar 2004 - 22:26 #20
Jeg synes enten han/hun skal anvende ekspertens metode eller en funktion, der laver white-space efter et hvis antal karakterer. Hvilken er op til talker, men jeg tror ikke, man kommer tættere på en løsning under disse omstændigheder? :)
Avatar billede jaw Nybegynder
12. januar 2004 - 22:30 #21
Nah, jeg har vist heller ikke lige umiddelbart nogen bedre forslag... :)
Avatar billede jammerlab Nybegynder
12. januar 2004 - 23:34 #22
nak-m>> Sammenhægende ord over en hvis bredde :) vel de færste ord der er på for eksempel 46 tegn ;) det jeg vil "betegne" for spam...  men jeg kan godt li den metode med: $row[text] = ereg_replace("([^ ]{46})","\\1<br>",$row[text]);

Den der opfyler det mest lige nu :) så tak for hjælpen begge 2...
Avatar billede jaw Nybegynder
13. januar 2004 - 18:13 #23
Det var da så lidt :)
Avatar billede nak-m Nybegynder
15. januar 2004 - 08:22 #24
takker for point :)
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