PHP / MySQL:某些字符未正确编码并显示为问号

PHP / MySQL: Certain characters not being encoded properly and appearing as question marks

我是 PHP 和 MySQL 的新手,希望有人能帮助我。

我有一个 MySQL 数据库和一个名为 "myTable" 的 table。

服务器连接排序规则和包含文本的单列都设置为数据类型“utf8_general_ci”,并且所有字符都正确显示在数据库中。

但是,当我使用 PHP 从这个 table 中获取 (select) 数据并在我的页面上回显时,browser 显示问号而不是某些非英文字符

例如与德语字符 ä, ö, ü 一起出现(即 a、o 和 u 上面有两个点)。 示例: 德语术语“Geschützter Bereich”(en:Restricted Area)显示为“Gesch?tzter Bereich”。

我目前使用以下方法来 select 数据,所以我猜我要么需要在 select 处理它时再次应用正确的 (utf-8) 编码,要么在将它回显到页面时但不知道如何在这里实现这一目标。

我发现 PHP 具有以下和其他编码选项,但想知道是否有一种方法可以在页面上只设置一次而不是一直在回显某些内容:

string utf8_encode ( string $data )

有人能告诉我正确的方法吗?
我主要对标准欧洲语言感兴趣,如德语、法语、西班牙语等,目前不必涵盖亚洲语言和希伯来语。

我现在的代码:

    $tbl = "myTable";
    $lang = $_GET["lang"];
        if(!isset($lang)){
            $lang = "de";
        }

    // fetch db data
    $conn = new mysqli($servername, $username, $password, $dbname);
    if($conn->connect_error){
        die("Connection failed: " . $conn->connect_error);
    } 
    $sql = "SELECT * FROM " . $tbl;
    $result = $conn->query($sql);

    // store data in temporary array 
    while($translations = $result->fetch_assoc()){
        $arr[] = array("ID" => $translations["tID"], "trans" => $translations[$lang]);
    }
    $conn->close();

    // get required items from array
    function fetchByID($arr, $itemID){
        foreach($arr as $key => $val){
            if($val["ID"] == $itemID){
                echo $val["trans"];
            }
        }
    }

并回应:

echo fetchByID($arr, 1); ...

非常感谢。

请通过添加

指定字符集
$conn->set_charset("utf8")