Gå til innhold

Problemer med str_replace og æ, ø og å [LØST]


Anbefalte innlegg

Holder på med en gjestebok, og på siden den skal vises brukes UTF-8 enkoding.

Problemet er at jeg ikke får æ, ø og å til å vises på riktig måte, i stedet kommer det opp tegn som Ã.

Jeg har selvfølgelig prøvd å løse problemet før jeg henvender meg til dere. Dette har jeg gjort:

- Kontrollert at <?php header("Content-Type: text/html; charset=utf-8"); ?> ligger i siden.

- Kontrollert at collation == utf8_general_ci er satt i tabellen i databasen.

- Prøvd med funksjonen htmlentities () og htmlspecialchars () (er ikke sikker på om jeg har gjort det riktig. Kan noen gi meg eksempler og forklare??)

 

Slik bruker jeg str_replace:

$vismelding= htmlspecialchars($vismelding);
$vismelding= str_replace("æ","æ",$vismelding);
$vismelding= str_replace("ø","ø",$vismelding);
$vismelding= str_replace("å","å",$vismelding);
$vismelding= str_replace("Æ","Æ",$vismelding);
$vismelding= str_replace("Ø","Ø",$vismelding);
$vismelding= str_replace("Å","Å",$vismelding);

$vismelding er variabelen som skriver ut meldingen.

 

Merk: Det er kun det som skrives ut fra dette php-scriptet som ikke viser våre 3 bokstaver.

Endret av Kimmeham
Lenke til kommentar
Videoannonse
Annonse

utf8_decode()? Tror det skal funke, i hvert fall. Da skal du slippe å ha med alt det der str_replace()-greiene, skulle jeg tro.

 

Du kan muligens prøve å ta med CONVERT i MySQL-queryen din, f.eks. SELECT CONVERT(etellerannet USING latin1) AS etellerannet. Mener å huske det er sånn det brukes, har ikke manualen for hånden. Tror du skal ha helgardert deg da.

Endret av loketing
Lenke til kommentar

$utf8 = 'Æ, Ø og Å - æ, ø og å';
$latin1 = utf8_decode($utf8);
echo $latin1;

...burde da gi ut...

Æ, Ø og Å - æ, ø og å

Blir vanskelig å gjette hvordan det ville sett ut hos deg, men prøv å bytte ut variablene så det passer hos deg. Noe sånt?

$vismelding = utf8_decode($vismelding);
$vismelding = htmlspecialchars($vismelding);

Og bare ta vekk alle str_replace()-tingene. Blir som sagt vanskelig å vite helt hvordan det vil se ut, og koden over er nok ikke akkurat optimal, men det burde funke sånn ca. Hvis du fremdeles vil ha med htmlspecialchars()-tingen, kan du så klart det, men bare vær klar over at den ikke har noe med æ-ø-å å gjøre. Den går kun på &, ", ', < og >.

 

For mer info om de nevnte funksjonene, se her: htmlspecialchars og utf8_decode.

 

(Og som nevnt, hvis du ikke får det helt til, så legg opp litt av koden, så blir det lettere å hjelpe.) :)

Lenke til kommentar

Jepp, loketing, det er nettopp slik jeg har det, men har nå tatt vekk htmlspecialchars.

Kan vel like godt legge inn begge filene, i config filen ligger det ting som styrer andre ting enn gjesteboken også, så alt der har ikke med gjesteboken å gjøre.

 

config.php:

Klikk for å se/fjerne innholdet nedenfor
<?php
//CONFIG FILEN
$oppKoble=mysql_connect("localhost", //Vanligvis satt til localhost
     "**", //Bruker til mySQL databasen
     "**") or die ("Kunne ikke koble til databasen ... ERROR 0x1"); // Passord til mySQL databasen
mysql_select_db("kimmeham_net", $oppKoble) or die ("Kunne ikke koble til angitt database ... ERROR 0x2");

//Brukernavn Og Passord Til Admin
$bruker['bruker'] = 'passord';
$bruker['admin'] = '**';

//Forms Til Innlogging
$login=$_POST['login'];
$brukerid=$_POST['brukernavn'];
$passordid=$_POST['passord'];
$loggutidz=$_POST['logut'];



$loginnavn="index2.php?page=login"; // Navn på login fil
$skrivenavn="index2.php?page=gjestebok"; // Navn på fil for å skrive innlegg
$session=$_SESSION['innlogget']; // Innlogget session
$filnavn="index2.php"; 
$sideid=$_GET['page']; //Finner id til side (inkluderingsscriptet) 
$inknavn="page"; //Ofte satt til id
$helurlside="$filnavn" ."?$inknavn=". "$sideid"; //Full URL til side
$blogid="$helurlside" . "$id";


//Login/Logut Funksjoner 
$loggutid=$_POST['logut'];

if (isset($loggutid)){
unset($session);
}
$loggutid="<form method='post' action=''><input class='knapp' type='submit' name='logut' value='Logg ut'>";

$admLinker="<a href='$skrivenavn'>Skriv et innlegg</a><br />
<a href='$portefoljeadm'>Porteføljen</a>";


//Andre variabler
$ip = $_SERVER['REMOTE_ADDR'];
$dato=date('d-m-Y H:i:s');
$antalltegn=200; 
$visforkort=substr("$ingress", 0, $antalltegn);
$ho='"';

//BBkoder
$ingress= str_replace("[i]","<i>",$ingress);
$ingress= str_replace("[/i]","</i>",$ingress);
$ingress= str_replace("[u]","<u>",$ingress);
$ingress= str_replace("[/u]","</u>",$ingress);
$ingress= str_replace("[img]","<img class='artklbilder' src='",$ingress);
$ingress= str_replace("[/img]","'>",$ingress);
$ingress= str_replace("[link*",'<a href="',$ingress);
$ingress= str_replace("*]",'">',$ingress);
$ingress= str_replace("[/link]","</a>",$ingress);

$hoveddel= str_replace("[b]","<b>",$hoveddel);
$hoveddel= str_replace("[/b]","</b>",$hoveddel);
$hoveddel= str_replace("[i]","<i>",$hoveddel);
$hoveddel= str_replace("[/i]","</i>",$hoveddel);
$hoveddel= str_replace("[u]","<u>",$hoveddel);
$hoveddel= str_replace("[/u]","</u>",$hoveddel);
$hoveddel= str_replace("[img]","<img class='artklbilder' src='",$hoveddel);
$hoveddel= str_replace("[/img]","'>",$hoveddel);
$hoveddel= str_replace("[link*","<a href='",$hoveddel);
$hoveddel= str_replace("*]","'>",$hoveddel);
$hoveddel= str_replace("[/link]","</a>",$hoveddel);
$hoveddel= str_replace("[link*",'<a href="',$hoveddel);
$hoveddel= str_replace("*]",'">',$hoveddel);

$vismelding= str_replace("[b]","<b>",$vismelding);
$vismelding= str_replace("[/b]","</b>",$vismelding);
$vismelding= str_replace("[i]","<i>",$vismelding);
$vismelding= str_replace("[/i]","</i>",$vismelding);
$vismelding= str_replace("[u]","<u>",$vismelding);
$vismelding= str_replace("[/u]","</u>",$vismelding);
$vismelding= str_replace("[img]","<img class='artklbilder' src='",$vismelding);
$vismelding= str_replace("[/img]","'>",$vismelding);
$vismelding= str_replace("[link*","<a href='",$vismelding);
$vismelding= str_replace("*]","'>",$vismelding);
$vismelding= str_replace("[/link]","</a>",$vismelding);
$vismelding= str_replace("[link*",'<a href="',$vismelding);
$vismelding= str_replace("*]",'">',$vismelding);

//utf-enkoding
$navn = utf8_decode($navn);
$vismelding = utf8_decode($vismelding);
//Smileys
$vismelding= str_replace(":smil:","<img alt='etSmil' src='smileys/smil.gif'>",$vismelding);
$vismelding= str_replace(":glad:","<img alt='etSmil' src='smileys/glad.gif'>",$vismelding);
$vismelding= str_replace(":hmm:","<img alt='etSmil' src='smileys/hmm.gif'>",$vismelding);
$vismelding= str_replace(":skuffet:","<img alt='etSmil' src='smileys/skuffet.gif'>",$vismelding);
$vismelding= str_replace(":trist:","<img alt='etSmil' src='smileys/trist.gif'>",$vismelding);
$vismelding= str_replace(":soet:","<img alt='etSmil' src='smileys/forelsket.gif'>",$vismelding);
$vismelding= str_replace(":sint:","<img alt='etSmil' src='smileys/sint.gif'>",$vismelding);
$vismelding= str_replace(":forvirret:","<img alt='etSmil' src='smileys/forvirret.gif'>",$vismelding);
$vismelding= str_replace(":tommelopp:","<img alt='etSmil' src='smileys/tommelopp.gif'>",$vismelding);
$vismelding= str_replace(":tommelned:","<img alt='etSmil' src='smileys/tommelned.gif'>",$vismelding);
$vismelding= str_replace(":blink:","<img alt='etSmil' src='smileys/blink.gif'>",$vismelding);

$hoveddel= str_replace(":smil:","<img alt='etSmil' src='smileys/smil.gif'>",$hoveddel);
$hoveddel= str_replace(":glad:","<img alt='etSmil' src='smileys/glad.gif'>",$hoveddel);
$hoveddel= str_replace(":hmm:","<img alt='etSmil' src='smileys/hmm.gif'>",$hoveddel);
$hoveddel= str_replace(":skuffet:","<img alt='etSmil' src='smileys/skuffet.gif'>",$hoveddel);
$hoveddel= str_replace(":trist:","<img alt='etSmil' src='smileys/trist.gif'>",$hoveddel);
$hoveddel= str_replace(":soet:","<img alt='etSmil' src='smileys/forelsket.gif'>",$hoveddel);
$hoveddel= str_replace(":sint:","<img alt='etSmil' src='smileys/sint.gif'>",$hoveddel);
$hoveddel= str_replace(":forvirret:","<img alt='etSmil' src='smileys/forvirret.gif'>",$hoveddel);
$hoveddel= str_replace(":tommelopp:","<img alt='etSmil' src='smileys/tommelopp.gif'>",$hoveddel);
$hoveddel= str_replace(":tommelned:","<img alt='etSmil' src='smileys/tommelned.gif'>",$hoveddel);
$hoveddel= str_replace(":blink:","<img alt='etSmil' src='smileys/blink.gif'>",$hoveddel);

$ingress= str_replace(":smil:","<img alt='etSmil' src='smileys/smil.gif'>",$ingress);
$ingress= str_replace(":glad:","<img alt='etSmil' src='smileys/glad.gif'>",$ingress);
$ingress= str_replace(":hmm:","<img alt='etSmil' src='smileys/hmm.gif'>",$ingress);
$ingress= str_replace(":skuffet:","<img alt='etSmil' src='smileys/skuffet.gif'>",$ingress);
$ingress= str_replace(":trist:","<img alt='etSmil' src='smileys/trist.gif'>",$ingress);
$ingress= str_replace(":soet:","<img alt='etSmil' src='smileys/forelsket.gif'>",$ingress);
$ingress= str_replace(":sint:","<img alt='etSmil' src='smileys/sint.gif'>",$ingress);
$ingress= str_replace(":forvirret:","<img alt='etSmil' src='smileys/forvirret.gif'>",$ingress);
$ingress= str_replace(":tommelopp:","<img alt='etSmil' src='smileys/tommelopp.gif'>",$ingress);
$ingress= str_replace(":tommelned:","<img alt='etSmil' src='smileys/tommelned.gif'>",$ingress);
$ingress= str_replace(":blink:","<img alt='etSmil' src='smileys/blink.gif'>",$ingress);
?>

 

gjestebok.php:

Klikk for å se/fjerne innholdet nedenfor
<?php
include("config.php");
//SKRIVE TIL GJESTEBOK
$gjknapp=$_POST['gjbtn'];
$gjnavn=$_POST['gjnavn'];
$gjepost=$_POST['gjepost'];
$gjhjemmeside=$_POST['gjhjemmeside'];
$gjmelding=$_POST['gjmelding'];
$slettinnlegg=$_GET['slettinlg'];
$sltid=$_GET['sltid'];
$banipadr=$_GET['banip'];
$fjernbanip=$_GET['fjernblokk'];
$skrivkommentar=$_GET['skrivkommentar']; 
$skrivkommentartrykk=$_POST['kommentarknapp'];
$kommentaren=$_POST['kommentaren'];

if (!isset($gjknapp)) {
echo "<a href='#skriv'>Skriv innlegg!</a>";
}

if (isset($skrivkommentar) && (isset($session))) {
echo "<div class='kommentarer'>Funksjon ikke tilgjengelig enda <br /><br /> <a href='index.php?page=gjestebok'>[Lukk]</a></div>";
$hm="<div class='kommentarer'><form method='post' action=''>
 <table width='298' border='0'>
   <tr>
     <td width='91'>Kommentar:</td>
     <td width='191'><textarea class='skrivefelt' name='kommentaren'></textarea></td>
   </tr>
   <tr>
     <td> </td>
     <td><input class='knapp' type='submit' name='kommentarknapp' value='Skriv kommentar'></td>
   </tr>
 </table>
</form></div>";
if (isset($skrivkommentartrykk)) {
$sql="UPDATE gjesteboken";
$sql.=" SET kommentar=$kommentaren";
$sql.=" WHERE id=$skrivkommentar";
mysql_query($sql, $oppKoble);
echo "Kommentaren ble lagt til";
}
}

if (isset($fjernbanip) && (isset($session))) {
$sql="DELETE FROM banip WHERE ip=$fjernbanip";
echo "<div class='kommentarer'><u>$fjernbanip er frigjort</u> <br /><br /> <a href='index.php?page=gjestebok'>[Lukk]</a></div>";
}

if (isset($banipadr) && (isset($session))) {
$sql="INSERT INTO banip";
$sql.=" (ip)";
$sql.=" VALUES";
$sql.=" ('$banipadr')";

mysql_query($sql, $oppKoble);
echo "<div class='kommentarer'><u>Brukeren ble bannet (ip: $banipadr)</u> <br /><br /> <a href='index.php?page=gjestebok'>[Lukk]</a></div>";
mysql_close();

}


if (isset($slettinnlegg) && (isset($session))) {
$sql="DELETE FROM gjesteboken WHERE id=$slettinnlegg";
mysql_query($sql, $oppKoble);
echo "<div class='kommentarer'><u>Innlegget ble slettet (id: $slettinnlegg)</u> <br /><br /> <a href='index.php?page=gjestebok'>[Lukk]</a></div>";
}
if (isset($sltid) && (isset($session))) {
include("config.php");
$sql="SELECT * FROM gjesteboken WHERE id=$sltid";
$result=mysql_query($sql, $oppKoble);
while ($admstuff=mysql_fetch_array($result)) {
$anavn=$admstuff['navn'];
$aepost=$admstuff['epost'];
$ahjemmeside=$admstuff['hjemmeside'];
$aip=$admstuff['ip'];
$askrdato=$admstuff['dato'];
$aidnr=$admstuff['id'];

echo "<div class='kommentarer'><u>Informasjon om $anavn (id: $aidnr):</u>";
echo "<br /><b>Navn:</b> $anavn";
echo "<br /><b>Epost:</b> $aepost";
echo "<br /><b>Hjemmeside:</b> $ahjemmeside";
echo "<br /><b>Skrevet den:</b> $askrdato";
echo "<br /><b>ID nummer:</b> $aidnr";
echo "<br /><b>IP adresse:</b> $aip <a href='index.php?page=gjestebok&banip=$aip'>[Ban Ip]</a> ";
echo "<a href='index.php?page=gjestebok&fjernblokk=$aip'>[Fjern IP Ban]</a>";
echo "<br /><br /><a href='index.php?page=gjestebok&skrivkommentar=$aidnr'>[Skriv kommentar]</a>";
echo "<br /><a href='index.php?page=gjestebok&slettinlg=$aidnr'>[Slett innlegget]</a>";
echo "<br /> <a href='index.php?page=gjestebok'>[Lukk]";
echo "</div>";
}


}

if (isset($gjknapp)) {
if (empty($gjnavn) || empty($gjmelding)) {
echo "Fyll ut alle feltene!";
die;
}
include ("config.php");

$sql="INSERT INTO gjesteboken";
$sql.=" (navn, epost, hjemmeside, melding, ip, dato)";
$sql.=" VALUES";
$sql.=" ('$gjnavn','$gjepost','$gjhjemmeside','$gjmelding','$ip','$dato')";

mysql_query($sql, $oppKoble) or die ("Kunne ikke skrive til databasen ... ERROR 0x3");



echo "Takk for ditt innlegg!";
echo "<br><b>$ip</b> er logget ... "; 
echo "<br /> <a href='index2.php?page=gjestebok'>Tilbake til gjestebok</a>";
mysql_close(); 

}
else {

//HENTE FRA GJESTEBOK
include("config.php");

$sql="SELECT * FROM gjesteboken ORDER BY id DESC";
$res=mysql_query($sql, $oppKoble) or die ("ERROR 0x3 - Kunne ikke kjøre spørring mot database ... ");
while ($gjbok=mysql_fetch_array($res)) {
$hentnavn=$gjbok['navn'];
$hentepost=$gjbok['epost'];
$henthjemmeside=$gjbok['hjemmeside'];
$hentmelding=$gjbok['melding'];
$hentip=$gjbok['ip'];
$hentdato=$gjbok['dato'];
$hentid=$gjbok['id'];
$vismelding=nl2br(htmlentities($hentmelding));


if (isset($session)){
$info="<div class='gjestebokinst'><a href='index.php?page=gjestebok&sltid=$hentid'>  [Mer]</a></div>";
}


echo "<div class='kommentarer'>";
if (isset($henthjemmeside)) { 
echo "<a href='$henthjemmeside'>$hentnavn</a> $info";
}
else {
echo "$navn";
}
echo "</div>";
include("config.php");
echo "<div class='kommentarer'>$vismelding</div>";
}
?>
<script type='text/javascript'> 
<!-- 
function insert(verdi){ 
   document.getElementById('gjmelding').value += verdi;
} 
--> 
</script> 
<br />
<br />
<a name="skriv"></a>
<form action="" method="post">
 <table width="429" border="0">
   <tr>
     <td width="78"> </td>
     <td width="263"> </td>
     <td width="74"> </td>
   </tr>
   <tr>
     <td>Navn: </td>
     <td><input name="gjnavn" type="text" class="skrivfelt" size="40"></td>
     <td> </td>
   </tr>
   <tr>
     <td>Epost:</td>
     <td><input name="gjepost" type="text" class="skrivfelt" size="40"></td>
   </tr>
   <tr>
     <td>Hjemmeside:</td>
     <td><input name="gjhjemmeside" type="text" class="skrivfelt" value="" size="40"></td>
   </tr>
   <tr>
     <td>Melding:</td>
     <td><textarea name="gjmelding" cols="40" rows="10" class="skrivfelt"></textarea></td>
     <td> </td>
   </tr>
   <tr>
     <td><input name="gjbtn" type="submit" id="gjbtn" value="Skriv innlegg" class="knapp"></td>
     <td> </td>
   </tr>
 </table>
 <a href="javascript:insert(':smil: ')"><img src="smileys/smil.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :glad: ')"><img src="smileys/glad.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :hmm: ')"><img src="smileys/hmm.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :skuffet: ')"><img src="smileys/skuffet.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :trist: ')"><img src="smileys/trist.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :soet: ')"><img src="smileys/forelsket.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :sint: ')"><img src="smileys/sint.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :forvirret: ')"><img src="smileys/forvirret.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :tommelopp: ')"><img src="smileys/tommelopp.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :tommelned: ')"><img src="smileys/tommelned.gif" alt="" border="0"/></a>
 <a href="javascript:insert(' :blink: ')"><img src="smileys/blink.gif" alt="" border="0"/></a>
 <br />   <p><img src="include/audit_image.php" alt="Antibot tall" width="200" height="30" />
      <input maxlength="5" size="5" name="userdigit" type="text" value="" />
* Epost adresse vises ikke offentlig <br />
OBS! Upassende- og spam innlegg fjernes. <br />
IP adressen din logges. <br />
Gjentatte brudd på dette fører til utestengelse. 
<br />
</form>
<?php
}
?>

 

Prøvde forresten med $vismelding = utf8_decode($vismelding); men...

Lenke til kommentar

Hm. Den korte versjonen:

- Gå ned til //HENTE FRA GJESTEBOK i scriptet ditt

- Finn nederste linjen i avsnittet, $vismelding = ...

- Legg til dette rett over den setningen:

$hentmelding = utf8_decode($hentmelding);

Burde holde.

 

Den lange versjonen:

- Tingene blir antakelig lagret i utf-8 i databasen (sjekket ikke så nøye)

- Det hentes ut som utf-8

- Ukjente tegn (æ,ø og å, for å nevne noen) vises som Ã..

- Denne teksten blir så gjort om til html-entiteter:

$hentmelding = 'Æ, Ø og Å - æ, ø og å';
$vismelding=nl2br(htmlentities($hentmelding));
echo $vismelding;

...og da blir det...

Æ, Ø og Å - æ, ø og å

Som du ser, har htmlentities gjort de ukjente tegnene om til html-entiteter, noe som gjør det sykt knotete. Legger du til $hentmelding = utf8_decode($hentmelding); inni der, som forklart, blir det sånn:

$hentmelding = 'Æ, Ø og Å - æ, ø og å';
$hentmelding = utf8_decode($hentmelding);
$vismelding=nl2br(htmlentities($hentmelding));
echo $vismelding;

...som igjen blir...

Æ, Ø og Å - æ, ø og å

altså html-entitetene for æ, ø og å. Kutter du ut htmlentities, blir det ganske enkelt

Æ, Ø og Å - æ, ø og å

Sikkert unødvendig langt skrevet, men jeg håper det forklarer litt!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...