首页 文章

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

提问于
浏览
2

我是PHP和MySQL的新手,希望有人可以帮助我 .

我有一个MySQL数据库,其中包含一个名为“myTable”的表 .

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

但是,当我使用PHP从这个表中获取(选择)数据并在我的页面上回显它时,b rowser shows question marks instead of certain non-English characters .

例如 . 发生在德语字符 ä, ö, ü (即a,o和u上面有两个点) . Example: 德语术语“ Geschützter Bereich " (en: Restricted Area) appears as " Gesch?tzter Bereich ” .

我目前使用以下内容来选择数据,所以我的猜测是我要么在选择时再次应用正确的(utf-8)编码,要么在回显到页面时,但不知道如何在这里实现 .

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

string utf8_encode ( string $data )

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

My current code:

$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"];
            }
        }
    }

And to echo it out:

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

提前谢谢了 .

1 回答

  • 3

    请通过添加指定字符集

    $conn->set_charset("utf8")
    

相关问题