| Programmering i PHP | ||
|---|---|---|
| Föregående | Nästa | |
En sträng är en grupp av tecken. Strängar förekommer, i stort sett, i alla program. PHP är ett språk som är väldigt rikt på funktioner för att hantera strängar. Mycket beroende på att det är ett språk för web-programmering där i princip allt som kommer från programmet är strängar. Det uppmuntrar även till att man låter okända användare mata in strängar till programmen vilket gör att man av säkerhetsskäl måste vara försiktig med strängarna.
I PHP markeras en sträng av att den innesluts av enkla eller dubbla citationstecken. Skillnaden är den att inom dubbla citationstecken kommer alla variabler i strängen att bytas ut mot sitt värde. Se följande exempel:
Som du ser så sker ingen variabelsubstitution i den andra raden eftersom den omges av enkla citationstecken.Som vi såg i förra stycket så omges en sträng av citationstecken. En naturlig fråga man då ställer sig är vad som händer om jag vill ha citationstecken i en sträng. Se följande exempel:
Man ser direkt att det inte kommer att bli bra. Hur skall tolkaren kunna veta var strängen slutar? Det som kommer att ske är att strängen börjar vid det första citationstecknet och slutar vid den andra. Den bosktav (h) som kommer efter kommer att orsaka ett "parse error". Hur gör man då? Jo om man vill infoga specialtecken i en sträng måste dessa föregås av specialtecknet \ (bakvänt snedstreck eller backslash). Strängen ovan blir då: Nu blir utskrifter som vi tänkt oss. Det finns även andra specialtecken: I strängar inom enkla citationstecken (') så substitueras bara "\'". Alla andra representerar sig själva.Man kan inte lägga ihop strängar med hjälp av additionsoperatorn (+). Den är ju till för aritmetiska termer. Som tur är så finns det speciella opteratorer för just strängar. Den som lägger ihop två strängar kallas för concatenationsoperatorn. Den representeras av tecknet "." (punkt). Se nedanstående exempel.
I PHP kan man jämföra strängar med de operaorer som vi lärt oss för numeriska värden. Det är ganska specifikt för PHP. Räkna inte med att du kan göra så i andra språk du kommer i kontakt med. Även i PHP finns det funktioner för att jämföra strängar.
Strcmp (STRing CoMPare) är en funktion som jämför två strängar med varandra. Om de är exakt likadana returneras värdet 0. Om den första är större returneras 1 och om den andra är större returneras -1. Syntaxen och ett exempel på hur den kan användas visas i nedanstående exempel.
Tänk på att strcmp gör skillnad på stora och små bokstävar. Texten "Rätt lösenord" ovan kommer bara att skrivas ut om $password innehåller exakt "Hemligt". Vill du jämföra strängen utan att versaler/gemener skall ha någon betydelse kan du prova strcasecmp som fungerar på samma sätt fast "case insensitive".Ofta vill man ändra på strängar så att de ser lite annorlunda ut. Det kan vara att man vill göra om alla bokstäver till versaler eller gemener. Eller att man vill byta något ord mot ett annat. PHP har massor av funktioner för detta. Vanliga saker man vill göra med strängar är att byta ut en förekomst av ett ord mot ett annat eller att göra alla tecken till små eller stora bokstäver eller ta bort tomma tecken.
Dessa två funktioner (STRing TO UPPERcase och LOWERcase) tar en sträng som argument och returnerar samma sträng med alla bokstäver konverterade till antingen stora bokstäver (versaler) eller små bokstäver (gemener).
Se följande lilla exempel:
Dessa två funtioner (UpperCase FIRST och WORDS) är kanske inte lika användbara som strtoupper och strtolower men kan vara bra att känna till. De kan användas till exempel om man vill snygga till användarinmatad data. Vad de gör är att göra den första bokstaven i en sträng (ucfirst) eller första bokstaven i varje ord i strängen (ucwords) till versal. Observera att dessa funktioner bara verkar på de tecken det gäller och inte de övriga. Se följande exempel:
Exempel 13-7. Exempel med ucfirst och ucword
<?php $str1 = "kalle anka"; $str2 = ucwords($str1); // str2 blir "Kalle Anka" $str1 = 'KALLE ANKA'; $str2 = ucwords($str1); // str2 blir KALLE ANKA (inga tecken blir gemener) $str3 = ucwords(strtolower($str1)); // str3 blir Kalle Anka ?>
Ucfirst fungerar på exakt samma sätt fast bara på det allra första tecknet i strängen.
Detta är en väldigt trevlig lite funktion (STRing REVerse). Det enda den gör är att den tar en sträng som argument och returnerar samma sträng fast reverserad.
En betydligt mer användbar funktion än strrev är strlen (STRing LENgth). Denna returnerar antalet tecken i en sträng.
Som vanligt tar vi ett litet exempel:
Detta är en mycket användbar funktion. Den byter ut en teckenföljd i en mening mot en annan. Funktionen tar tre argument och returnerar en sträng. Det första argumentet är den teckenföljd som skall ersättas, det andra är det som det skall ersättas med och det tredje argumentet är den sträng som det hela berör. Det som returneras är strängen i det tredje argumentet där alla förekomster av teckenföljden i det första argumentet ersatts med tecknen i det andra argumentet.
Förvirrad? Se nedanstående exempel:
Detta är användbart till väldigt mycket. Bara fantasin sätter gränserna.I PHP hanterar man av naturliga skäl ofta strängar som skall presenteras i en webläsare. Flera av dessa strängar kommer vanligtvis från användare eller andra osäkra källor. Då vill man gärna kontrollera så att inte användaren kan mata in data som förstör resten av sidan. Till exempel så skall man inte i ett web-forum kunna skriva in HTML-kod hur som helst. Man skulle då kunna länka in fula bilder eller andra typsnittet på hela sidan. Man kan åstadkomma detta genom att använda massor av anrop på str_replace. Till exempel:
Exempel 13-11. Med str_replace
<?php
//
// Följande två rader tar bort alla förekomster av större än och
// mindre än och ersätter dem med deras HTML-motsvarighet. Detta
// eliminerar alla HTML-taggar.
//
$html_string = str_replace("<", "&lt;", $html_string);
$html_string = str_replace(">", "&gt;", $html_string);
?>
Ofta vill man hitta eller använda bara vissa delar av en sträng. Det finns flera funktioner för detta. Vi skall titta på två av dem.
Dessa två funktioner fungerar så att de tar två argument, båda är strängar (STRing in STRing och STRing case-Insensitive in STRing). Den första är den sträng som det skall sökas i och det andra är det sökta. Det som returneras är det som är kvar av det första argumentet efter den funna strängen. Förvirrad?
Funktionen stristr fungerar på samma sätt men den bryr sig inte om om den eftersökta strängen har stora eller små bokstäver (Case-Insensitive).Aktuellt avsnitt i Manualen. http://www.php.net/manual/en/ref.strings.php
| Föregående | Hem | Nästa |
| Kommentering | Funktioner |