Avatar billede thewebmaker Nybegynder
08. juli 2008 - 19:34 Der er 12 kommentarer

Fremmedbogstaver med echo

Hej alle eksperter :)

Jeg er lidt i tvivl om jeg har placeret dette spørgsmål rigtigt, da jeg ikke er klar over hvad der er bære skylden.

Mit problem er forholdsvis enkelt :)

Jeg har lavet en funktion som vha. af echo spytter noget tekst ud på en side, men æ, ø og å kan ikke ses?

jeg har prøvet at gøre sådan, at det som kommer fra echo bliver sat om til skrifttypen Verdana, men også uden held :S

Hvad skal jeg gøre?

/Mvh. Jesper
Avatar billede thewebmaker Nybegynder
08. juli 2008 - 19:36 #1
Har et eks. på det her:

http://www.son-gaming.com/vis.php
Avatar billede showsource Seniormester
08. juli 2008 - 19:43 #2
Er din fil gemt som utf8?
Hvor kommer text fra?
Avatar billede thewebmaker Nybegynder
08. juli 2008 - 19:54 #3
Er ikke lige helt med på det der utf8?

HTML-delen:

<head>
<title>Untitled Document</title>
</head>

<body>
Forum halløj :)<br />
<br />
<form action="post.php" method="post">
navn<input type="text" name="navn"  />
<br /><br />
emne<input type="text" name="emne"  />
<br /><br />
besked
<textarea id="besked" cols="23" rows="5" name="besked"></textarea>
<br />
<br />
<input type="submit" value="Send"/>
</form>
</body>
</html>

Php-delen: (post.php)

$navn=$_POST['navn'];
$emne=$_POST['emne'];
$besked=$_POST['besked'];

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

$query = "INSERT INTO forum VALUES ('','$navn','$emne','$besked')";
mysql_query($query);

mysql_close();
?>

Vis.php:

$foresp = mysql_query("SELECT * FROM forum");

while($row = mysql_fetch_array($foresp)) {
echo "<font face=\"Verdana, Arial, Helvetica, sans-serif\">".$row[navn]."</font>";
echo "<br>";
echo "<font face=\"Verdana, Arial, Helvetica, sans-serif\">".$row[emne]."</font>";
echo "<br>";
echo "<font face=\"Verdana, Arial, Helvetica, sans-serif\">".$row[besked]."</font>";

}

?>
Avatar billede showsource Seniormester
08. juli 2008 - 19:59 #4
Flg. er kildekoden fra dit link:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<font face="Verdana, Arial, Helvetica, sans-serif">Jesper</font><br><font face="Verdana, Arial, Helvetica, sans-serif">Saadan noget bQvl :(</font><br><font face="Verdana, Arial, Helvetica, sans-serif">x,y,z,&#65533;,&#65533;,&#65533;

Hvad skal jeg g&#65533;re for jeg kan skrive &#65533;,&#65533;,&#65533;? </font></body>
</html>

Men du kan nok bruge:

$navn=utf8_decode($_POST['navn'];
$emne=utf8_decode($_POST['emne'];
$besked=utf8_decode($_POST['besked']);


Eller, hvilken collation er din tabel i mysql? Er den utf8 ?
Og du bør tjekke for sql injections
Og du bør bruge noget css i stedet for font face.......
Avatar billede thewebmaker Nybegynder
08. juli 2008 - 20:09 #5
Hmm, min collation stod på latin_swedish, hvor jeg efterfølgende ændre den til utf8_danish, men dette løser stadig ikke problemet.

Derefter jeg har sæt uft8_decode ind foran mine $_POST, men dette laver blot mine fine firkanter om til ?-tegn, der hvor jeg skriver æ , ø , å.

Skal nok lige tjekke SQL injections bagefter ;)

Hvordan vil du foreslå jeg gør med CSS ?
Avatar billede showsource Seniormester
08. juli 2008 - 20:18 #6
$foresp = mysql_query("SELECT * FROM forum");'

echo"<div style=\"font-family: Verdana, Arial, Helvetica, sans-serif;\">";

while($row = mysql_fetch_array($foresp)) {

echo $row["navn"]."<br />\r\n";
echo $row["emne"]."<br />\r\n";
echo nl2br($row["besked"])."<br />\r\n";

}

echo"</div>";


Men du bruger en editor til at lave din php fil?

Prøv at sørge for dine filer IKKE gemems som utf8
Avatar billede showsource Seniormester
08. juli 2008 - 20:19 #7
Ehh, men nu havde du jo så lige ændret collation på din tabel.......
Avatar billede thewebmaker Nybegynder
08. juli 2008 - 20:35 #8
Ja, jeg bruger Dreamweaver CS3

Men er det ikke MySQL som reagere på collation? Det var jo inde på PhpMyAdmin jeg ændrede kollationen.

Så du forslår jeg ændre uft8_danish om til latin_swedish igen, og så sætter nl2br ind foran ($row ... ?
Avatar billede thewebmaker Nybegynder
08. juli 2008 - 21:30 #9
Men har tænkt på om man kan lave en "if" der laver alle æ,ø og å'er om til &aelig; osv. ?
Avatar billede pidgeot Nybegynder
09. juli 2008 - 11:18 #10
Collation angiver sortering, ikke tegnsæt på output - og dit problem er netop at MySQL ikke har fået at vide du vil have UTF-8 ud. Kør queryen "SET NAMES utf8" når du kobler dig på databasen, så bør det gå meget bedre (og drop det med utf8_decode).

Du kan sagtens lave det med at lave æ, ø og å om til entities (der er endda en funktion til det i PHP, men det er en meget forældet måde at gøre tingene på, og hænger slet ikke sammen når man bevæger sig op i Unicode.

Dermed ikke sagt at du ikke skal have rigtig collation på - men det hele skal jo hænge sammen.
Avatar billede showsource Seniormester
09. juli 2008 - 13:43 #11
collation == sortering ? Har du et link?

Hvordan kan

<?php
$str = "Æblegrød <h2>med fløde</h2>";
echo htmlentities($str);
?>

være forældet ?
Avatar billede pidgeot Nybegynder
09. juli 2008 - 14:05 #12
Hvad collation angår, så er det en del af definitionen på det ord (Mere præcist har det også indflydelse på sammenligning af strenge, men det hænger jo i og for sig sammen med sortering). Selvfølgelig skal du vælge en collation der passer til dit tegnsæt, men grunden er ikke at du ikke kan få dine data ud ellers - men at ting vil optræde i forkert rækkefølge og sammenlignes forkert. Se selv http://en.wikipedia.org/wiki/Collation.

htmlentities er forældet, fordi det kun har relevans i en ikke 8-bit-clean tid, eller hvor man vil bruge tegn udenfor det valgte tegnsæt.
Da du alligevel ikke får flere tegn end med et Unicode-tegnsæt, og du bør have en exceptionel god grund til at bruge noget andet, giver det ingen mening at bruge htmlentities - det ender blot med at bruge mere hukommelse, CPU-tid, og båndbredde, og det er der ingen grund til.

htmlspecialchars, derimod, har masser af relevans, på grund af de par tegn der har en speciel betydning i HTML.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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