Avatar billede markus-king Nybegynder
12. marts 2014 - 19:46 Der er 8 kommentarer og
1 løsning

Highlight baggrund, fjerne tekst (ikke CSS/HTML)

Hej alle,

Jeg vil gerne have mulighed for at tilføje en baggrundsfarve til den information jeg hiver ud af min database. Det er dog ikke et spørgsmål om simpel CSS.

Hvis jeg eksempelvis har en streng "Testing", vil jeg gerne tilføje en baggrundsfarve ligesom en highlight. Teksten skal bare HELT fjernes, således at baggrundsfarven fylder lige så meget som ordet, men selve ordet ikke fremgår.

Umiddelbart kan man jo blot gøre følgende:

<?php
    $str = "Testing";
    $strlength = strlen($str);

    echo $str;
    echo "<br>";

    for($i = 1; $i <= $strlength; $i++){
        echo nl2br("<div style=\"background-color: #666666;width:8px;height:20px;float:left;\"></div>");
    }

?>

Men den information jeg hiver ud af databasen kan jo have \n i sig, så hvordan sørger den for at følge tekstens opbygning og tilføjer baggrundsfarven, men helt fjerner bogstaverne?

Det er ikke nok blot at sætte farven på bogstaverne til samme baggrundsfarve.
Avatar billede Slater Ekspert
12. marts 2014 - 19:57 #1
Du kunne lave to elementer inde i hinanden, sætte baggrundsfarven på den yderste, og sætte den inderste til visibility: hidden;

Sådan her:
Hej <span style="background-color: red;"><span style="visibility: hidden;">med</span></span> dig
Avatar billede markus-king Nybegynder
12. marts 2014 - 20:12 #2
Tak for det hurtige svar.

Teksten skal på ingen måde være synlig, heller ikke hvis man hiver kildekoden frem.

Jeg kan derfor ikke rigtig bruge den metode.
Avatar billede Slater Ekspert
12. marts 2014 - 20:18 #3
Aha. Ja, så bliver det straks ekstremt kompliceret. Du kan ikke få et html-element til at udvide sig efter en tekst, uden at den tekst findes i koden - og du kan ikke måle pixelstørrelsen af en tekst, uden at udskrive den.

Det kan godt nok lade sig gøre at måle bredden server-side, men så bliver det kompliceret med linjeskift.

Er det en mulighed for dig, at bruge en monospace font? I så fald er det jo så simpelt som at udskrive en streng af tilfældige bogstaver med samme længde som den korrekte.
Avatar billede markus-king Nybegynder
12. marts 2014 - 20:34 #4
Desværre ikke.

Som jeg ser det er den eneste mulighed at gøre det gennem PHP. På den måde sikrer jeg, at teksten ikke bliver udskrevet til brugeren. Om det bliver kompliceret er i virkeligheden også fint, men der må næsten være en smart måde at udføre opgaven på.

Eventuelt kunne man måske tjekke strengen igennem, og hvis den indeholder linjeskift skal den manuelt udskrive dem? Det er bare lidt kringlet. Hvis nogen kan komme med et forslag til hvordan vil jeg være meget taknemmelig.
Avatar billede Slater Ekspert
12. marts 2014 - 20:46 #5
Du kan måle pixelstørrelsen af en streng i PHP med imagettfbbox() - og ja, du kan jo dele det op i delstrenge på linje med preg_split('/[\r\n]+/s') og skrive dem ud én ad gangen i hvert sit element. Men helt simpelt er det ikke.

Jeg vil også tro, at størrelsen af teksten varierer en smule mellem PHP og HTML, fordi de bruger forskellig antialiasing.
Avatar billede markus-king Nybegynder
12. marts 2014 - 20:51 #6
Hmm..

Er det smartere at lade PHP skabe et billede med en ønsket farve til både tekst og baggrund? På den måde vil PHP godt nok udskrive strengen til billedet, men billedet vil ikke kunne læses pga de ens farver?
Avatar billede Slater Ekspert
13. marts 2014 - 09:02 #7
Så du simpelthen udskriver et ensfarvet billede i den størrelse, teksten ellers ville optage? Også en mulighed. Svært at sige, uden helt at vide, hvad du skal bruge det til.
Avatar billede markus-king Nybegynder
13. marts 2014 - 20:16 #8
Det ser ikke ud til at der er en relativ let måde at gøre det på. Jeg må bare finde ud af noget baseret på hvad du har skrevet :)

Mange tak for hjælpen, vær velkommen til at smide et svar!
Avatar billede Slater Ekspert
13. marts 2014 - 20:39 #9
Tak, men det er lidt mange point at give for noget, der egentlig ikke kom et svar på. Tag du også selv.

Held og lykke med det.
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

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