我是PHP和MySQL的新手,希望有人能帮助我。
我有一个名为“myTable”的MySQL数据库。
服务器连接排序规则和包含文本的单个列都使用数据类型“utf8_general_ci
”进行设置,并且所有字符都在数据库中正确显示。
但是,当我使用PHP从此表中获取(选择)数据并在我的页面上回显时,b rowser显示问号而不是某些非英文字符。
E.g。发生在德语字符ä,ö,ü(即a,o和u上面有两个点)。
示例:
德语术语“Geschützter Bereich
”(zh:受限制的区域)显示为“Gesch?tzter Bereich
”。
我目前使用以下内容来选择数据,所以我的猜测是我需要在选择时再次应用正确的(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); ...
非常感谢提前。
答案 0 :(得分:3)
请通过添加
指定字符集$conn->set_charset("utf8")