Mats Johannesson
Mats Johannesson

Reputation: 11

Problems with swedish letters MySQL and LAMP

I have struggled with this some time. I could not get it to work.

On the url http://course.easec.se/problem.pdf I have put together what I have done so far!

Any suggestions?

<?php 
header('Content-Type: text/html; charset=ISO-8859-1');  //no changes
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "db_test4";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
mysqli_set_charset("utf8");
echo "From PHP Script  ååååå\n";   //to see if there is problem when edit the script
$sql = "SELECT * FROM test_tbl";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

        echo "Kundid: " . $row["kund_id"]. " - Förnamn: " . $row["fnamn"]. " - Efternamn: " . $row["enamn"]. " - Adress:" . $row["adress1"] ."<br>";
    }
} else {
    echo "0 results";
}
$conn->close();   
?>

Client:

Client

It works now, seems do be my editor, when I tried ANSI instead of UTF-8 and Changes the header to !

enter image description here

Upvotes: 0

Views: 412

Answers (3)

Johannes
Johannes

Reputation: 67778

Directly below

$conn = new mysqli($servername, $username, $password, $dbname);

add

$conn->set_charset("utf8");

Note: In addition you should also make sure that the charset of your HTML (in the <head> tag) is set to utf-8, like <meta charset="utf-8">

Upvotes: 3

Martin
Martin

Reputation: 22770

I like how you set your question in a PDF, somewhat original :-D . Now, the answer to your problem will be found here. Read the whole question and as many of the answers as you can.

then as a last effort I change editor to ANSI instead of UTF-8 then it works!

Due to this the issue is your internal PHP script encoding so Reaseach using PHP Multibyte String and setting your PHP code to :

<?php
mb_internal_encoding('UTF-8'); //this is the important one! 
mb_http_output('UTF-8');
mb_http_input('UTF-8');

to ensure your PHP code is also UTF-8 complient when executed. You can also (or should be able to) edit the settings in your IDE editor to save PHP files without UTF-8 BOM (Byte Order Mark) which will also solve this problem and save them as UTF-8 understandable by other services.


Additional Notes (cos I like to moan about MySQL UTF-8):

MySQL UTF-8 is NOT the full UTF-8 . Solutions are offered in the linked thread above, some general additions:

  • 1) You want to always use UTF8mb4 (and ideally _unicode_ci).

  • 2) In the final screenshot of your PDF you should to set as many of these as practical to utf8mb4_unicode_ci.

  • 3) Setting the connection character set is vital, even if the server and the client both use utf8mb4 if the connection is only utf-8 it brings everything else down to that low point.

  • 4) Recommended:

    header('Content-Type: text/html; charset=UTF-8');  //UTF-8
    

Only MySQL UTF-8 is broken, other implementatios of it is not and is perfectly usable as and is generally regarded as an HTML standard.

Upvotes: 0

AHJeebon
AHJeebon

Reputation: 1248

Use: header('Content-Type: text/html; charset=ISO-8859-1');

Instead of: header('Content-type: text/html; charset=utf-8');

No need to use inside while loop, use top of the page before print anything.

Upvotes: 0

Related Questions