Sida 1 av 2

Mysql och php problem med åäö

Postat: 19 aug 2012, 12:28
av mwd123
Hej!

Är det någon som stött på problem med att åäö visas konstigt på hemsidan när man kör med mysql och php? jag har det problemet nu, och vet inte riktigt hur jag ska lösa det.

För rrdtool så löste jag det såhär i crontab:

export LANG=sv_SE

Går det att lösa det på något sätt i min phpfil, för jag har provat ändra lite i mysql men har inte lyckats.

Edit. löst på fulhackvis.

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 14:04
av Niklas
Du måste se till att du har rätt kodning i alla led.

Tabellerna i databasen skall vara satta till UTF-8, dina script skriver du och sparar i UTF-8 och när du presenterar datan via HTML så anger du UTF-8 i den inledande metataggen som berättar för webbläsaren vilken kodning den ska köra. Har du en massa data i databasen som är i något annat ISO-format så får du köra utf8_encode-funktionen i PHP eller så konverterar du dina tabeller i databasen till UTF-8 (vilket är smartare) om det inte redan är så. mySQL har inbyggd funktion för att konvertera datan.

Du kan förstås köra något annat än UTF-8 men det är vad jag brukar köra.

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 14:17
av mwd123
Hej!

Ja det märkliga är ju att om jag ändrar till UTF-8 i headern, så blir det rätt från i mysqlstuket på devicessidan, men då blir tabbarna fel, då dör mina åäö där. men när jag kollar på de i devices.php så är de skrivna rätt, så de är inte förvrängda som det kan bli ibland när man ändrar en fil.

Det funkar ju på alla andra sidor, så det känns som att det enklaste vore att göra något i php vid hämtningen från mysql? (fulhack men kanske går att göra så det funkar?)

Jag vet dock inte hur :( hoppas du kanske vet hur det ska se ut! min devices.php ser ut såhär:


<?php
$conn = mysql_connect("localhost", "root", "XXXXXXXXX")
or die($msg_no_connect);
mysql_select_db("NexaDB")
or die(mysql_error());
$res = mysql_query("SELECT a.name, a.type, a.unitid, a.status, a.recordtime as rectime FROM t_nexalogg a,osvosvosv
or die(mysql_error());
if (mysql_num_rows($res) > 0) {
echo '<table border="1" bgColor=#02061d>';
echo '<th bgcolor=#4D0000 align=left>DEVICE</th><th bgcolor=#4D0000 align=left>ID</th><th bgcolor=#4D0000 align=left>STATUS</th><th bgcolo$
while ($row = mysql_fetch_assoc($res)) {
echo "<tr>
<td>{$row['name']}</td>
<td>{$row['unitid']}</td>
<td>{$row['status']}</td>
<td>{$row['type']}</td>
<td>{$row['rectime']}</td>
</tr>";
}
echo '</table>';
}
else

Går det att lägga in det här på någotvis så den inte kör utf8?

Mvh Magnus

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 14:35
av Niklas
mwd123 skrev:Hej!

Ja det märkliga är ju att om jag ändrar till UTF-8 i headern, så blir det rätt från i mysqlstuket på devicessidan, men då blir tabbarna fel, då dör mina åäö där. men när jag kollar på de i devices.php så är de skrivna rätt, så de är inte förvrängda som det kan bli ibland när man ändrar en fil.

Det funkar ju på alla andra sidor, så det känns som att det enklaste vore att göra något i php vid hämtningen från mysql? (fulhack men kanske går att göra så det funkar?)

Jag vet dock inte hur :( hoppas du kanske vet hur det ska se ut! min devices.php ser ut såhär:


<?php
$conn = mysql_connect("localhost", "root", "XXXXXXXXX")
or die($msg_no_connect);
mysql_select_db("NexaDB")
or die(mysql_error());
$res = mysql_query("SELECT a.name, a.type, a.unitid, a.status, a.recordtime as rectime FROM t_nexalogg a,osvosvosv
or die(mysql_error());
if (mysql_num_rows($res) > 0) {
echo '<table border="1" bgColor=#02061d>';
echo '<th bgcolor=#4D0000 align=left>DEVICE</th><th bgcolor=#4D0000 align=left>ID</th><th bgcolor=#4D0000 align=left>STATUS</th><th bgcolo$
while ($row = mysql_fetch_assoc($res)) {
echo "<tr>
<td>{$row['name']}</td>
<td>{$row['unitid']}</td>
<td>{$row['status']}</td>
<td>{$row['type']}</td>
<td>{$row['rectime']}</td>
</tr>";
}
echo '</table>';
}
else

Går det att lägga in det här på någotvis så den inte kör utf8?

Mvh Magnus
Men vad har tabellen för kodning i databasen? Är det olika?

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 18:27
av mwd123
Tabellen har standard, den heter typ utf8 generic eller nåt sånt... jag har provat att ändra till något annnat men det hjälpte inte, vet inte om man kanske måste konvertera den efteråt oxå..

Mvh

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 18:31
av mwd123
Det roliga är ju att om jag ändrar denna:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Till

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

Så funkar ju mysqloutputen med php, men då får jag krångel med mina tabbar och grader istället:
strul1.jpg
Plus att gradtecknet blir fyrkanter istället... men nu är ju min tabell från mysql okej, men man vill ju att allt ska se bra ut :-)

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 18:35
av Niklas
mwd123 skrev:Det roliga är ju att om jag ändrar denna:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Till

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

Så funkar ju mysqloutputen med php, men då får jag krångel med mina tabbar och grader istället:
strul1.jpg
Plus att gradtecknet blir fyrkanter istället... men nu är ju min tabell från mysql okej, men man vill ju att allt ska se bra ut :-)
Ja, du kör lite iso-8859-1 och lite UTF-8. Fixa till så att allt blir samma.
Att konvertera iso-8859-1 gör du med utf8_encode i PHP. Typ

Kod: Markera allt

<?php
echo utf8_encode("Hällå Wörld");
?>
<td>{$row['name']}</td> i din kod. Du kan ju testa med <td>{utf8_encode($row['name'])}</td>

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 19:44
av mwd123
Hej!

Allt i mysql är nog redan utf8, det fungerade dock inte med det du skrev ovan heller. men eftersom mysql kör med utf8 så ska det väl göras om till iso-8859-1 isåfall?

Mvh Magnus

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 19:49
av Niklas
mwd123 skrev:Hej!

Allt i mysql är nog redan utf8, det fungerade dock inte med det du skrev ovan heller. men eftersom mysql kör med utf8 så ska det väl göras om till iso-8859-1 isåfall?

Mvh Magnus
Då kör du en utf8_decode istället. :-)

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 20:12
av mwd123
Exakt den stringen som du angav ovan dödade dock min devices.php, men jag provade göra om den lite, men det blev nog säkert inte rätt :) kanske ska se ut på något annat vis?

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 20:24
av Niklas
mwd123 skrev:Exakt den stringen som du angav ovan dödade dock min devices.php, men jag provade göra om den lite, men det blev nog säkert inte rätt :) kanske ska se ut på något annat vis?
Du kan testa

Kod: Markera allt

echo '<tr>';
echo '<td>'.utf8_decode($row['name']).'</td>';
echo '<td>'.utf8_decode($row['unitid']).'</td>';
echo '<td>'.utf8_decode($row['status']).'</td>';
echo '<td>'.utf8_decode($row['type']).'</td>';
echo '<td>'.utf8_decode($row['rectime']).'</td>';
echo '</tr>';

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 20:27
av mwd123
Jag kom precis på att jag glömt spara om filen till utf8 efter jag ändrat i headern, så nu funkar det :)

http://192.168.0.32/rrdtool/devices.php?tab=7

Så att ändra till utf8 i devices.php, och sedan spara om filen till utf8 gjorde susen :D mycket härligt!!

Tack för hjälpen!! :)

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 20:42
av mwd123
En annan liten snabb sak när jag ändå har en expert på tråden :)

<font color="#FFFF40">
<?Php
$file = "temps0.txt";
$contents = file($file);
$string = implode($contents);

echo ('Inne: '.$string.'°');

Visar tempen på min sida, men det är ju ett mellanslag innan grad tecknet,  tecknet kom dit efter att jag sparat om den till utf8, men det funkar ju, tar jag bort  innan gradtecknet så blir det en fyrkant istället.

Hur gör jag för att få bort mellanslaget innan gradtecknet? har du nån aning om det? :) (jag hade mellanslaget innan jag konverterade oxå, men jag vet inte hur jag får bort det)

Tack på förhand!

Mvh Magnus

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 20:48
av Niklas
mwd123 skrev:En annan liten snabb sak när jag ändå har en expert på tråden :)

<font color="#FFFF40">
<?Php
$file = "temps0.txt";
$contents = file($file);
$string = implode($contents);

echo ('Inne: '.$string.'°');

Visar tempen på min sida, men det är ju ett mellanslag innan grad tecknet,  tecknet kom dit efter att jag sparat om den till utf8, men det funkar ju, tar jag bort  innan gradtecknet så blir det en fyrkant istället.

Hur gör jag för att få bort mellanslaget innan gradtecknet? har du nån aning om det? :) (jag hade mellanslaget innan jag konverterade oxå, men jag vet inte hur jag får bort det)

Tack på förhand!

Mvh Magnus
Om det är för att presentera data på en hemsida så kör med &deg vilket ger dig ett gradtecken oavsett kodning.
echo "Inne: $string&deg";

Re: Mysql och php problem med åäö

Postat: 19 aug 2012, 22:09
av mwd123
Det funkade ju oxå :) blev dock ett mellanslag då med, det kanske inte går att få gradtecknet direkt efter graderna?

Mvh