我在 xampp 上有一个本地数据库并且工作正常。我将数据库上传到网络服务器上,希腊字符显示为符号。无论是创建数据库还是上传到服务器,问题仍然存在。 下面是数据库连接、数据库结构、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>
下面我有数据库结构的屏幕截图并显示问题
这看起来像“双重编码”;请参阅我的 UTF-8 字符问题;我看到的不是我存储的,以便进一步讨论。
由于“Mojibake”表演了两次,所以很难弄清楚。我建议研究我所说的内容,看看这种情况是否发生了两次——也许是在复制数据两次时。
虽然可以“修复”数据,但您确实需要修复原因。通过将 UTF-8 视为 latin1,数据被破坏了两次(或三次?)。
CHARACTER SET utf8
(或utf8mb4
)。使用 SHOW 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) -->
Δοκιμ
如果可能,修复代码,删除表,然后重建表。