Web服务器上的数据库显示希腊字符为符号,而在xampp上一切正常

Database on the webserver shows greek character as symbols while on xampp everything is working

提问人:Anny 提问时间:10/30/2023 最后编辑:Rick JamesAnny 更新时间:11/9/2023 访问量:66

问:

我在 xampp 上有一个本地数据库并且工作正常。我在 Web 服务器上上传了数据库,希腊字符显示为符号。无论是创建数据库还是上传到服务器上,问题仍然存在。 下面我有数据库连接、数据库结构、php 和 javascript 的屏幕截图。数据库表中也有结果。前三行是用 xampp 添加的希腊字符,然后我上传了,然后它开始显示希腊语作为符号。

这是用于数据库连接的

<?php

// For add - update and delete
$hostname = "localhost";
$user = "*****";
$password = "*********";  
$database = "app_foros";

$connect= new mysqli ($hostname, $user, $password, $database);//_connect

mysqli_query($connect,"SET CHARACTER SET 'utf8'");

?>

这是为了添加数据

<?php
include('db.php');

$expences=$_POST["expences"];
$expences6 = $_POST["expences6"];
$expences13 = $_POST["expences13"];
$expences24 = $_POST["expences24"];

$expenceDif = $_POST["expenceDif"];
$datepicker = $_POST["datepicker"];
$greek = $_POST["greek"];


$connect=mysqli_connect($hostname, $user, $password, $database);

$input=mysqli_query($connect,"insert into exoda
(expences,expences6,expences13,expences24,
expenceDif,datepicker,greek) 
    values  ('$expences','$expences6','$expences13','$expences24',
'$expenceDif','$datepicker','$greek')");
if($input==true){
    echo"Καταχώρηση πώλησης!";
    }else{
        echo "ΔΕΝ ΚΑΤΑΧΩΡΗΘΗΚΕ!";
    }
    
?>

这是 Javascript

$("#save").click(function(){


var date = document.getElementById("getDate");


let getDate = date.value; //document.getElementById("getDate");
let expences6 = document.getElementById("expence").value;
let expence13 = document.getElementById("expence13").value;
let expence24 = document.getElementById("expence24").value;
let addValue = document.getElementById("addValue").value;

let greek = "Δοκιμές ξανα και ";
let expenceDif = newFpa24.value;
    //alert(addValue)

 alert(greek);  
     $.post('data/salesadd.php', {expences:addValue,   expences6:expences6, expences13:expence13, 
        expences24:expence24,expenceDif:expenceDif, 
datepicker:getDate, greek:greek}, function(data){
    alert(data);

    expence.value="";
    expence13.value="";
    expence24.value="";
    expence24.value="";
    addValue.value="";

    expence0.focus();

 });

});

此 HTML 页面

<!DOCTYPE html>
<html lang="el">
<head>
<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ισοζύγιο τρεχουσών συναλλαγών</title>
<link rel="stylesheet" href="bootstrap522/css/bootstrap.min.css">
<link rel="stylesheet" href="mycss.css">

<script src="https://ajax.googleapis.com/
ajax/libs/jquery/3.6.0 /jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/
[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</head>

在下面,我有数据库结构的屏幕截图并显示了问题

数据库连接
添加数据 php
Javascript代码 HTML代码

数据结果
表结构 数据库结构

php mysql 字符

评论

2赞 Matt 10/30/2023
stackoverflow.com/questions/279170/utf-8-all-the-way-through
0赞 Rick James 11/9/2023
stackoverflow.com/questions/38363566/......
0赞 Rick James 11/9/2023
请提供以显示实际存储的内容。SELECT HEX(col), col ...
0赞 Anny 11/9/2023
感谢您@RickJames的帮助,这是我从希腊语专栏中得到的:ΓοκιÎ1/4Îï' Î3/4αÎ1/2α και C38EE2809DC38EC2BFC38EC2BAC38EC2B9C38EC2BCC38EC2AD...
0赞 Anny 11/9/2023
@RickJames我阅读了您的文件,但也很难找到解决方案。如果你能帮助我,我将不胜感激,因为我没有你的经验。先谢谢你

答:

0赞 Rick James 11/9/2023 #1

这看起来像“双重编码”;请参阅我的 UTF-8 字符问题;我所看到的不是我存储的内容,以便进一步讨论。

由于是“Mojibake”表演了两次,因此很难弄清楚。我建议研究一下我所说的内容,看看这种情况是否发生了两次——也许是在复制数据两次时。

虽然可以“修复”数据,但您确实需要修复原因。通过将 UTF-8 视为 latin1,数据被篡改了两次(或三次?

  • 要存储的字节需要采用 UTF-8 编码。应用程序的语言是什么?PHP文字?一些数据文件?爪哇岛?等。
  • INSERTing 和 SELECTing 文本时的连接需要指定 utf8 或 utf8mb4。这也是特定于应用程序的。
  • 需要声明(或默认)(或 )。用于查看设置。CHARACTER SET utf8utf8mb4SHOW CREATE TABLE

简单的莫吉烘焙:

CONVERT(CONVERT(BINARY('Δοκιμ') USING latin1) USING utf8mb4) --> 
        Δοκιμ

双编码:

HEX(CONVERT(CONVERT(BINARY('Δοκιμ') USING latin1) USING utf8mb4)) -->
        C38EE2809DC38EC2BFC38EC2BAC38EC2B9C38EC2BC

以另一种方式返回(显示为 2 个步骤):

CONVERT(CONVERT(UNHEX('C38EE2809DC38EC2BFC38EC2BAC38EC2B9C38EC2BC')
          USING %s) USING utf8mb4) -->
       Δοκιμ

CONVERT(BINARY(CONVERT('Δοκιμ' USING latin1)) USING utf8) -->
       Δοκιμ

如果可能,请修复代码,删除表,然后重新生成表。

评论

0赞 Anny 11/9/2023
再次感谢詹姆斯@Rick。我知道问题出在发送数据时,因为如果我手动保存某些内容或更新服务器数据库中的数据,它会毫无问题地将数据存储在希腊字符中,当我从数据库中调用数据时,它看起来没问题。但我不知道如何解决这个问题。我相信问题发生在 php 代码发送数据到存储时。我没有问题给你访问权限,以便检查它。