Skip to content
Advertisement

Character encoding issue with PHP/MySQL

I have a web application I have been developing locally on my computer, I have recently launched it on my web server with the exact same settings for MySQL, but for some reason I am encountering a character encoding issue where “smart quotes” (’) are being displayed as black triangles with question marks (�), but only on the server.

This is on the HTML:

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

My local MySQL database (without character issues) is MySQL 5.7.26 with an InnoDB table with UTF8MB4 encoding and a table collation of utf8mb4-unicode-ci

My server MySQL database (with character issues) is MySQL 5.5.5-10.3.21 with an InnoDB table with UTF8MB4 encoding and a table collation of utf8mb4-unicode-ci

Perhaps there is a PHP setting somewhere I am missing?

Edit:

if I run this script on my computer is works perfectly, but if I run the same script on my server with the same data in the database, it give me the character encoding issue:

error_reporting(E_ALL);

include 'dbconfig.php';

$id = 19;

try {
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    $sql = $pdo->prepare("SELECT * FROM products WHERE id=:id");
    $sql->execute(['id' => $id]); 

    var_dump ($sql->fetch());

    while ($row = $sql->fetch()) {
        $data[] = $row;
    }

    echo json_encode($data);

} catch(PDOException $e) {
    //echo "Error: " . $e->getMessage();
    echo "Database Error";
}
$conn = null;

Advertisement

Answer

(Since this clearly shows a PDO omission, I am reopening)

One-line change:

$pdo = new 
    PDO("mysql:host=$servername;dbname=$dbname;dbname=db;charset=utf8mb4'",
        $username, $password);

References:
http://mysql.rjweb.org/doc.php/charcoll#php
Trouble with UTF-8 characters; what I see is not what I stored (Look especially for “black diamond”.)

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement