提问人:Anny 提问时间:10/30/2023 最后编辑:Rick JamesAnny 更新时间:11/9/2023 访问量:66
Web服务器上的数据库显示希腊字符为符号,而在xampp上一切正常
Database on the webserver shows greek character as symbols while on xampp everything is working
问:
我在 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>
在下面,我有数据库结构的屏幕截图并显示了问题
答:
0赞
Rick James
11/9/2023
#1
这看起来像“双重编码”;请参阅我的 UTF-8 字符问题;我所看到的不是我存储的内容,以便进一步讨论。
由于是“Mojibake”表演了两次,因此很难弄清楚。我建议研究一下我所说的内容,看看这种情况是否发生了两次——也许是在复制数据两次时。
虽然可以“修复”数据,但您确实需要修复原因。通过将 UTF-8 视为 latin1,数据被篡改了两次(或三次?
- 要存储的字节需要采用 UTF-8 编码。应用程序的语言是什么?PHP文字?一些数据文件?爪哇岛?等。
- INSERTing 和 SELECTing 文本时的连接需要指定 utf8 或 utf8mb4。这也是特定于应用程序的。
- 需要声明(或默认)(或 )。用于查看设置。
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) -->
Δοκιμ
如果可能,请修复代码,删除表,然后重新生成表。
评论
0赞
Anny
11/9/2023
再次感谢詹姆斯@Rick。我知道问题出在发送数据时,因为如果我手动保存某些内容或更新服务器数据库中的数据,它会毫无问题地将数据存储在希腊字符中,当我从数据库中调用数据时,它看起来没问题。但我不知道如何解决这个问题。我相信问题发生在 php 代码发送数据到存储时。我没有问题给你访问权限,以便检查它。
评论
SELECT HEX(col), col ...