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

问题描述 投票:0回答:1

我在 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>

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

Database connection
Adding data php
Javascript code
HTML code
Table data result
Table structure
Database structure

php mysql character
1个回答
0
投票

这看起来像“双重编码”;请参阅我的 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) -->
       Δοκιμ

如果可能,修复代码,删除表,然后重建表。

© www.soinside.com 2019 - 2024. All rights reserved.