WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP: Jämföra två strängar (https://www.wn.se/forum/showthread.php?t=1064016)

TheCheesePolice 2015-01-25 23:57

PHP: Jämföra två strängar
 
Hej!

Ber om ursäkt för mina dåliga programmeringskunskaper, men har ett litet bekymmer jag hade uppskattat hjälp med :).

Jämför en sträng med ett resultat jag hämtar från en databas, från vad jag kan se borde dessa matcha varandra. Kan UTF-8 påverka något om jag t.ex hämtar strängen jag ska jämföra med från en fil som inte är UTF-8-encoded och jämför med en databas som är det? Lyckas nämligen inte få dem att matcha.

Tack på förhand! :)

coredev 2015-01-26 09:05

Ja, om en sträng är i UTF8 och en annan i ISO8859-1 så kommer de inte att matcha (givet att de innehåller tecken från den utökade delen, vilket man nog bör förutsätta att de kan). Vad du får göra är att göra om en av strängarna till det andra formatet innan jämförelse, det kan du göra med t.ex.: http://php.net/manual/en/function.iconv.php

TheCheesePolice 2015-01-26 22:53

Citat:

Ursprungligen postat av coredev (Inlägg 20505496)
Ja, om en sträng är i UTF8 och en annan i ISO8859-1 så kommer de inte att matcha (givet att de innehåller tecken från den utökade delen, vilket man nog bör förutsätta att de kan). Vad du får göra är att göra om en av strängarna till det andra formatet innan jämförelse, det kan du göra med t.ex.: http://php.net/manual/en/function.iconv.php

Underbart, stort tack för hjälpen! :D

TheCheesePolice 2015-01-29 00:40

Bumpar denna lite.

Lyckas nu hämta/matcha SQL-data utan åäö i, men så fort något innehåller ä så hittas ingenting. Har dubbelkollat att min php-fil är sparad i UTF-8, har kollat att min sträng är UTF-8, tabellens kollationering är utf8_general_ci. Finns där något annat jag måste hålla koll på? Sliter snart av mig håret..

Lumax 2015-01-29 01:38

mb_internal_encoding("UTF-8");
Kör även SET NAMES 'utf8', om du kör MySQL.

Clarence 2015-01-29 09:37

Lägg till charset i din anslutning till databasen också. Med PDO skickar du med charset=utf8 i din connection string och med mysqli har du mysqli::set_charset, gamla mysql bör du inte använda så där kommenterar jag inte.

TheCheesePolice 2015-01-29 09:51

Citat:

Ursprungligen postat av Lumax (Inlägg 20505694)
mb_internal_encoding("UTF-8");
Kör även SET NAMES 'utf8', om du kör MySQL.

Testar det där ovan! Det sistnämnda har jag provat, måste det göras varje gång?

Citat:

Ursprungligen postat av Clarence (Inlägg 20505701)
Lägg till charset i din anslutning till databasen också. Med PDO skickar du med charset=utf8 i din connection string och med mysqli har du mysqli::set_charset, gamla mysql bör du inte använda så där kommenterar jag inte.

Hehe, förmodligen det incitamentet jag behöver. Har precis lyckats lära mig grundläggande PHP till den grad jag kan använda det, det här med PDO gör det väldigt mycket mer komplicerat, i varje fall i mitt huvud. Finns det några speciella fördelar med att använda det?

x264 2015-01-29 10:18

Citat:

Ursprungligen postat av TheCheesePolice (Inlägg 20505702)
Testar det där ovan! Det sistnämnda har jag provat, måste det göras varje gång?


Hehe, förmodligen det incitamentet jag behöver. Har precis lyckats lära mig grundläggande PHP till den grad jag kan använda det, det här med PDO gör det väldigt mycket mer komplicerat, i varje fall i mitt huvud. Finns det några speciella fördelar med att använda det?

Säkerhetsmässigt, då de förhindrar så kallade SQL-injections.

T.ex. såhär kan det se ut
Kod:

$sql = 'SELECT * FROM users where userId = :id';

$st = $db->prepare($sql);

$st->execute(array(
        "id" => $id
));

if ($st->rowCount() === 0) {
        // användaren existerar inte
      // sen om du vill returna eller vad du vill göra är upp till dig
      // annars kan du ha en else-sats under förstås.
}

$user = $st->fetchObject();

Så mycket svårare är det ju inte att lära sig.

Helt klart ett "måste" i min mening, så det är bara att mata in :)

Jag är övertygad om att du lär dig det rätt snabbt

Clarence 2015-01-29 10:37

Citat:

Ursprungligen postat av TheCheesePolice (Inlägg 20505702)
Testar det där ovan! Det sistnämnda har jag provat, måste det göras varje gång?


Hehe, förmodligen det incitamentet jag behöver. Har precis lyckats lära mig grundläggande PHP till den grad jag kan använda det, det här med PDO gör det väldigt mycket mer komplicerat, i varje fall i mitt huvud. Finns det några speciella fördelar med att använda det?

Största anledningen för den som inte känner till mer är att mysql_-funktionerna är "deprecated" vilket betyder att man planerar att ta bort den ur språket. Detta görs framförallt av säkerhetsskäl. Med andra ord är din kod inte framtidssäker om du använder mysql_. Det betyder också att ingen aktiv utveckling sker på funktionen.

Sen finns det även en hel del funktion som saknas i mysql-extensionen, t ex:
- Prepared statements (som förutom säkerhet även bla ger dig möjligheten till snabbare upprepande queries)
- Asynkrona queries (fire and forget)
- Bra felhantering (som du också kan styra själv enligt smak o tycke)
- Stored procedures
- OOP api
- Bra stöd för transaktioner

Sen säkert en mängd till som inte dyker upp nu. Kort sagt kommer du sakna massa funktionalitet som du får plåstra och krångla för att kunna emulera.

Som jag tycker x264 visar så är det inte så svårt att lära sig ...


Alla tider är GMT +2. Klockan är nu 14:33.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson