(PHP) Kan inte skriva ut å ä ö?

Permalänk
Medlem

(PHP) Kan inte skriva ut å ä ö?

Program:
WAMPSWERVER 2.2
Notepad++
Chrome

Kod:

<?php

$str1 = 'Kapten blåskägg fångade en hal ål';

$pattern= '/Kapten/';

if(preg_match($pattern, $str1)){
echo 'Träff';
}

else {
echo "boom";
}

Svar i Chrome
Träff

Vart ligger felet?

tack på förhand

Permalänk

Just php har jag aldrig kodat men i många fall så är det så att du måste sätta standarden på texten alternativt skriva ut en kod för att få fram åäö bokstäverna.

Ä: ä
Ö: ö

Permalänk
Medlem
Skrivet av Deathdevil:

Just php har jag aldrig kodat men i många fall så är det så att du måste sätta standarden på texten alternativt skriva ut en kod för att få fram åäö bokstäverna.

<meta charset="utf-8">

skriv det ovanför <?php

Visa signatur

"En dator"

Permalänk
Medlem

<?php echo utf8_encode('Hej på dig'); ?>

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

Edit: Ohoy var snabbare!

Visa signatur

Windows användare sedan 1991. Numera MacBook Pro M1 Pro.

Permalänk
Medlem

tack där!

<meta charset="utf-8">

fixade till problemet

Permalänk
Medlem
Skrivet av Deathdevil:

Just php har jag aldrig kodat men i många fall så är det så att du måste sätta standarden på texten alternativt skriva ut en kod för att få fram åäö bokstäverna.

Ä: ä
Ö: ö

Gör aldrig så här, det är en dålig lösning på ett problem som inte finns. Använd rätt encoding på filen istället, förslagsvis utf-8 som har rekommenderats ovan.

Skrivet av Tott3:

<?php echo utf8_encode('Hej på dig'); ?>

Detta är inte heller en bra lösning. Om texten redan är utf8-kodad kommer tecknena bli dubbelenkodade och man får ett annat tecken.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Detta är inte heller en bra lösning. Om texten redan är utf8-kodad kommer tecknena bli dubbelenkodade och man får ett annat tecken.

Vet, skulle ha skrivit lite mer information kanske. Det funkar, men inte att rekommendera.

Visa signatur

Windows användare sedan 1991. Numera MacBook Pro M1 Pro.

Permalänk
Medlem

PHP är inte det bästa valet om du ska arbeta med UTF8, faktum är att det är det sämsta valet du kan välja ifall du ska göra hemsidor som stödjer UTF8. Både Ruby on rails & ASP.NET är betydligt bättre val där.

I alla fall för att hjälpa dig lite på traven så kolla in dessa klasser, http://php.net/manual/en/ref.mbstring.php

de löser en del Unicode problem PHP har men inte allt.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem

Nu för tiden kör man oftast med utf-8 på allt. Visst tar lite mer plats, men lätt värt det.

Skickades från m.sweclockers.com

Permalänk
Medlem

Felet jag hade gjort va att i Notepad++, under fliken format, hade jag lyckats ändra på vad jag skulle koda till, bytte nu till UTF-8, och slipper därmed lägga till någon kod för att få ut å ä ö.

Permalänk
Inaktiv
Skrivet av MugiMugi:

PHP är inte det bästa valet om du ska arbeta med UTF8, faktum är att det är det sämsta valet du kan välja ifall du ska göra hemsidor som stödjer UTF8. Både Ruby on rails & ASP.NET är betydligt bättre val där.

I alla fall för att hjälpa dig lite på traven så kolla in dessa klasser, http://php.net/manual/en/ref.mbstring.php

de löser en del Unicode problem PHP har men inte allt.

Det var det dummaste jag hört. Har aldrig haft problem med utf-8 och php. De gånger jag har problem tyder på att jag gjort fel i HTML koden, fil encodingen eller i databasen.

Permalänk
Medlem
Skrivet av anon159752:

Det var det dummaste jag hört. Har aldrig haft problem med utf-8 och php. De gånger jag har problem tyder på att jag gjort fel i HTML koden, fil encodingen eller i databasen.

Tja, PHP är dåligt på det mesta så det skulle inte vara direkt överraskande. De flesta andra ramverk tar UTF-8 seriöst utan att skapa en massa överflödiga multibyte-funktioner för att täcka för behovet.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Inaktiv
Skrivet av anon159752:

Det var det dummaste jag hört. Har aldrig haft problem med utf-8 och php. De gånger jag har problem tyder på att jag gjort fel i HTML koden, fil encodingen eller i databasen.

Det är inte alltid man stöter på problemen, tex. substr kan dela ett å på mitten och det är inte alltid det händer.
strtolower kan inte göra stora ÅÄÖ till mindre bokstäver. mb_strtolower klarar inte av det heller om man inte speciferar utf8 som andra argument.

Det är subtila saker som kan skapa mycket problem, sen har jag personligen inte stött på detta mycket men problemen finns där.

Permalänk
Skrivet av anon150287:

Det är inte alltid man stöter på problemen, tex. substr kan dela ett å på mitten och det är inte alltid det händer.
strtolower kan inte göra stora ÅÄÖ till mindre bokstäver. mb_strtolower klarar inte av det heller om man inte speciferar utf8 som andra argument.

Det är subtila saker som kan skapa mycket problem, sen har jag personligen inte stött på detta mycket men problemen finns där.

Exempel:
http://niklasblomqvist.se/swec/utf.php

Visa signatur

Citera, tack!
Har du läst tråden om strandhögtalare och andra musiklådor?

Permalänk
Medlem
Skrivet av anon159752:

Det var det dummaste jag hört. Har aldrig haft problem med utf-8 och php. De gånger jag har problem tyder på att jag gjort fel i HTML koden, fil encodingen eller i databasen.

Ja må hända vara det dummaste du har hört men det betyder inte att det inte är sant, det finns stora allvarliga brister i PHP's hantering av UTF8, Känner du inte till dom kommer du ha ett stort rejält helvette att arbeta med UTF8 baserade hemsidor.

Det är lätt att man inte upptäcker detta om man ENBART sitter med t.ex. Engelska, eller olika sorters ASCII rymder som T.ex Svenska (latin1), men sitter du och faktiskt arbetar med UTF8 utöver engelska tecken så kommer du stöta på problemen, vissa av dom är riktigt jobbiga att hantera också.

Vist går det lösa det mesta, men i PHP's fall så måste du jobba runt problemet och det ger enormt mycket extra arbete. Ska du skriva en sida idag som faktiskt behöver UTF8 så är det ett bättre val att välja ett annat språk. PHP är inte ultimata valet för allt du gör där ute.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Skrivet av MugiMugi:

Ja må hända vara det dummaste du har hört men det betyder inte att det inte är sant, det finns stora allvarliga brister i PHP's hantering av UTF8, Känner du inte till dom kommer du ha ett stort rejält helvette att arbeta med UTF8 baserade hemsidor.

Det är lätt att man inte upptäcker detta om man ENBART sitter med t.ex. Engelska, eller olika sorters ASCII rymder som T.ex Svenska (latin1), men sitter du och faktiskt arbetar med UTF8 utöver engelska tecken så kommer du stöta på problemen, vissa av dom är riktigt jobbiga att hantera också.

Vist går det lösa det mesta, men i PHP's fall så måste du jobba runt problemet och det ger enormt mycket extra arbete. Ska du skriva en sida idag som faktiskt behöver UTF8 så är det ett bättre val att välja ett annat språk. PHP är inte ultimata valet för allt du gör där ute.

Men man nu kör med

mb_strtolower($str, 'UTF-8');

istället för

strtolower($str);

och liknande känns det som om problemet till stor del är ur vägen? Eller finns det fler scenarion då det kan gå fel? Är nyfiken!

Visa signatur

Citera, tack!
Har du läst tråden om strandhögtalare och andra musiklådor?

Permalänk
Medlem
Skrivet av blomqvist:

Men man nu kör med

mb_strtolower($str, 'UTF-8');

istället för

strtolower($str);

och liknande känns det som om problemet till stor del är ur vägen? Eller finns det fler scenarion då det kan gå fel? Är nyfiken!

Tja största problemet är att det kan gå fel där med ja, Är strängen du får T.ex. inte UTF8

I alla fall som standardvärden så hanteras det som UTF8 så du slipper definiera UTF8 samt det finns plugin som byter ut alla alla standard metoder med mb_ så du faktiskt slipper skriva dom. Men detta är bara ett plåster ovanför det redan misslyckade UTF hanteringen. Dock vissa sidor kommer inte detta funka så bra på och som alla vet så använder php globala inställningar och inte applikations baserade inställningar.

samt denna sida har en bra lista med UTF8 relaterade PHP problem
http://www.phpwact.org/php/i18n/utf-8

------

Men för att få lite mer värkliga problem jag har haft som inte precis är allt för lätta att lösa ( Går att lösa genom att jämföra UTF-8 adress rymder men det går in förbaskat mycket tid in här för att lösa det )

T.ex. ska du matcha strängar, så vist kan man göra en byte check eller en string check. T.ex. många språk så finns det dubbla och om inte mer uppsättningar av samma tecken i olika adressrymder beroende på beteende.

T.ex. Engelska alfabetet & Hiragana/Katakan här har vi Half-width form. Troligtvis har ni nog aldrig någonsin hört om detta men tja nu har ni.

Vill ni t.ex. göra en vettig sträng compare så kommer den misslyckas i PHP då den saknar bland anant det totalt samt då det inte är "samma" tecken mellan A och A. T.e.x i C# så behöver du inte bry dig mer eller mindre alls då du kan göra en string compare som hanterar detta. Detta är bland annat ett rent helvette i PHP som många t.ex. inte känner till.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem

Ledsen för bump!
Men går det inte bara att använda sig av:

setlocale (LC_ALL, "sv_SE.UTF-8");

idag ?
Sitter med det nu, får inte rätt på det dock
enligt manualen på php.net ska det räcka!

Visa signatur

Surfburk: i5-10400 @ 2.90GHz | RTX 2060 | 16gb @ 3200mhz
Servern :i5-4690K @ 3.5GHz | GTX 970 | 2x8gb @ 1600mhz

Permalänk
Entusiast

Det handlar om att textfilerna man skriver sparas med UTF8-kodning.
PHP i sig har inga svagheter med någon form av teckenkodning. Den skriver ut det som skrivs i textfilerna/databaserna.

<code>_encode -kommandona i PHP används i de få fall man behöver mata ut med en annan kodning än den som php-scriptet i sig sparades med.
T.ex utf8_encode för att skriva up UTF8-kodad text från ett dokument sparat i cp1252 t.ex. (cp1252 är Windows standard-kodning. Notepad t.ex sprarar alltid med teckenkodning cp1252 )

Tre krav för att få fullt stöd för en specifik teckenkodning:

  1. Textfilerna som håller scripten/koden sparas i den aktuella teckenkodningen. Detsamma gäller databaser.

  2. Utmatningen från webbservern sker i den valda teckenkodningen. De flesta webbservertjänsterna använder samma kodning som textfilerna använder sig av.

  3. Webbläsaren kan tyda och se att dokumentet den läser är av den aktuella kodningen.
    Fölr HTML gäller det att lägga till meta-taggen som talar om för webbläsaren att man matar utmed en given teckenkodning. I det här fallet UTF8.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem
Skrivet av SysGhost:

Det handlar om att textfilerna man skriver sparas med UTF8-kodning.
PHP i sig har inga svagheter med någon form av teckenkodning. Den skriver ut det som skrivs i textfilerna/databaserna.

<code>_encode -kommandona i PHP används i de få fall man behöver mata ut med en annan kodning än den som php-scriptet i sig sparades med.
T.ex utf8_encode för att skriva up UTF8-kodad text från ett dokument sparat i cp1252 t.ex. (cp1252 är Windows standard-kodning. Notepad t.ex sprarar alltid med teckenkodning cp1252 )

Tre krav för att få fullt stöd för en specifik teckenkodning:

  1. Textfilerna som håller scripten/koden sparas i den aktuella teckenkodningen. Detsamma gäller databaser.

  2. Utmatningen från webbservern sker i den valda teckenkodningen. De flesta webbservertjänsterna använder samma kodning som textfilerna använder sig av.

  3. Webbläsaren kan tyda och se att dokumentet den läser är av den aktuella kodningen.
    Fölr HTML gäller det att lägga till meta-taggen som talar om för webbläsaren att man matar utmed en given teckenkodning. I det här fallet UTF8.

Riktigt bra svar!
Jag löste mitt problem ca 2min efter mitt inlägg med just den problemlösnings-listan du skrev!

Visa signatur

Surfburk: i5-10400 @ 2.90GHz | RTX 2060 | 16gb @ 3200mhz
Servern :i5-4690K @ 3.5GHz | GTX 970 | 2x8gb @ 1600mhz

Permalänk
Legendarisk
Skrivet av SysGhost:

T.ex utf8_encode för att skriva up UTF8-kodad text från ett dokument sparat i cp1252 t.ex. (cp1252 är Windows standard-kodning. Notepad t.ex sprarar alltid med teckenkodning cp1252 )

Litet tillägg. Funktionen utf8_encode() är olyckligt namngiven, den konverterar egentligen från ISO-8859-1 till UTF-8. Om inputsträngen använder sig av en annan tabell kan man få oväntade resultat, Windows-1252 innehåller t.ex. tecken som inte finns i ISO-8859-1 och dessa kommer inte konverteras rätt.

Visa signatur

Abstractions all the way down.