Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP显示MySQL数据库中的希腊文本时出现问题_Php_Mysql_Utf 8_Character Encoding - Fatal编程技术网

使用PHP显示MySQL数据库中的希腊文本时出现问题

使用PHP显示MySQL数据库中的希腊文本时出现问题,php,mysql,utf-8,character-encoding,Php,Mysql,Utf 8,Character Encoding,我有一个网站托管在GoDaddy共享的Windows服务器上,这是我不久前使用程序化PHP和MySQL数据库编写的。数据库中的某些表包含用户通过某些页面插入的数据,在某些情况下还插入希腊文本。在过去的3-4年里,一切都运转良好,直到最近我得知该网站因某种原因关闭。我联系了GoDaddy,他们告诉我这一定是我的脚本有问题,但我已经很长时间没有对代码做任何更改了。不管怎么说,很明显,它是在同一天解决的,我什么也没做,所以我猜这是他们服务器的问题,尽管他们告诉我他们这边没有任何改变 问题是,从那时起,

我有一个网站托管在GoDaddy共享的Windows服务器上,这是我不久前使用程序化PHP和MySQL数据库编写的。数据库中的某些表包含用户通过某些页面插入的数据,在某些情况下还插入希腊文本。在过去的3-4年里,一切都运转良好,直到最近我得知该网站因某种原因关闭。我联系了GoDaddy,他们告诉我这一定是我的脚本有问题,但我已经很长时间没有对代码做任何更改了。不管怎么说,很明显,它是在同一天解决的,我什么也没做,所以我猜这是他们服务器的问题,尽管他们告诉我他们这边没有任何改变

问题是,从那时起,所有显示从数据库中选择的希腊字符的页面都显示如下:ΆÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ。当我用phpMyAdmin访问数据库时,我知道它们是这样存储在数据库中的,但我认为这是正常的,直到现在,因为当它们被选中并显示在页面中时,它们都很好。所以我不知道现在发生了什么,他们不再正确出现。顺便说一句,非数据库中的希腊字符会正确显示在页面中。我在互联网上搜索了很多关于这方面的信息,我相信我已经尝试了所有可能的解决方案。我检查过的一些东西是从另一个SO复制的答案:

所有PHP文件都使用记事本保存为UTF-8编码,不带BOM++ MySQL数据库、表和列都设置为utf8\U unicode\U ci PHP的默认字符集是UTF-8 我在头文件中使用以下代码:

header('Content-Type: text/html; charset=utf-8');
然后在html头中:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
服务器运行的是PHP版本5.2.17和MySQL版本5.0.96

另一件奇怪的事情是,当我使用XAMPP导出数据库并在本地导入时,使用与网站上相同的PHP文件,希腊字符会正确显示在页面上。然而,我的笔记本电脑上的XAMPP运行的是PHP版本5.4.7,MySQL的版本是5.5.27

如有任何建议,将不胜感激

谢谢

使用htaccess文件

AddDefaultCharset UTF-8
测试:

你在期待λλλοΑίτημα吗?是否选择HEXcol…-这将是正确的十六进制:CE86 CEBB CEBB CEBF 20。。。;这将是双重编码:C38E E280A0 C38E C2BB C38E C2BB C38E C2BF 20


阅读。

谢谢您的回答,但正如我所说,服务器在Windows上,因此没有htaccess文件。我还说过,问题只在于数据库中的希腊字符,而php脚本中的所有其他希腊文本都显示正确。当浏览数据抛出phpmyadmin时,数据显示正确或相同?不,相同。但我认为这是正常的,直到现在,因为当他们被选中并显示在页面上时,他们在本周之前都很好。不,这是一直以来的情况,它工作得很好。这就是在我的本地主机上使用xampp导出的同一个db的方式,它们会正确显示。尝试使用不同的浏览器,您能在这里发布db中的任何值吗?您如何在数据库中保存希腊字母?我的意思是你的查询在数据库中插入数据。你好@HK007,谢谢你的评论。我只使用mysqli_query$connection,$query,其中查询的形式是插入表col1,col2值“$val1”和“$val2”。使用mysqli_set_charset$connection,utf8;就在数据库连接代码之后,不要发送任何php头来设置代码中的其他字符集。@HK007您的意思是该头的内容类型:text/html;字符集=utf-8';是出现此问题的原因吗?可能是,也可能是因为您多次对其进行编码。因为同样的问题也发生在我身上,在我的情况下,我在保存到数据库之前进行了多次编码。您好,谢谢您的回复。选择的结果如下:C38EC2A5C38EC2A0C38EC2A38EE28098C38EC2A1C38EC2A38EC2A7。。。。所以它是双重编码的。那么,这个问题的可能解决方案是什么呢?我试着在这里阅读,但我不确定该采取哪种方法。。请告知。感谢您介绍如何修复数据。很抱歉,那个网页太乱了。请注意,根据您的字符集,双重编码有两种情况。谢谢Rick!我已经替换了所有受影响的列,现在可以在phpmyadmin中看到它们。然而,我不得不注释掉行mysqli_set_charset$dbc,'utf8';在mysql.php文件中,为了正确地查看页面中的数据,我不知道为什么。但是,如何确保从现在起在数据库表中正确输入它们?正如我在上面的评论中告诉HK007的那样,我只是使用mysqli_query$connection$query;用于将数据插入这些列,其中$query采用插入表col1、col2值“$val1”和“$val2”的形式;又发生了一件奇怪的事。所以我更新了所有包含这些编码的希腊字符的表,然后尝试刷新原始的p 以前固定的年龄。虽然我后来更新的表不会影响该页面,但该页面中的数据现在似乎只显示了问号。我现在用mysqli_set_charset$dbc“utf8”取消对行的注释,从而解决了这个问题;代码,这解决了问题。但是,如果您知道如何确保从现在起正确插入/更新这些列,请告诉我。。谢谢
default_charset = "utf-8";
AddDefaultCharset UTF-8
<?php header("content-type: text/html;charset=utf-8") ?>
<!doctype>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <?php echo "α β γ δ ε ϝ ϛ ζ η θ ι κ λ μ ν ξ ο π ϟ ϙ ρ σ τ υ φ χ ψ ω ϡ" ?>
</body>