如何让PHP使用正确的字符集?

如何让PHP使用正确的字符集?,php,mysql,character-encoding,Php,Mysql,Character Encoding,我正在使用一个MySQL数据库在PHP中制作一个KSSN韩国ID号检查器。 我通过使用对外部站点的file\u get\u contents调用来检查它是否工作 问题是带有韩语/韩语字符的请求使用了错误的字符集。 当我回显字符串时,韩语字符被问号代替 我怎样才能用韩语?我是否也应该更改数据库中的任何内容? 字符集应该是什么 PHP源代码和SQL转储: 注意:我使用的是Apache HTML,而不是CLI。我不知道字符集,但如果使用HTML显示结果,则应设置HTML的字符集 <ME

我正在使用一个MySQL数据库在PHP中制作一个KSSN韩国ID号检查器。 我通过使用对外部站点的file\u get\u contents调用来检查它是否工作

问题是带有韩语/韩语字符的请求使用了错误的字符集。 当我回显字符串时,韩语字符被问号代替

我怎样才能用韩语?我是否也应该更改数据库中的任何内容? 字符集应该是什么

PHP源代码和SQL转储:


注意:我使用的是Apache HTML,而不是CLI。

我不知道字符集,但如果使用HTML显示结果,则应设置HTML的字符集

     <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
还可以使用iconv php函数将字符集转换为其他字符集

最后,检查表的数据库编码


但是我想在您的情况下,您只需要更改meta标记。

我不知道字符集,但是如果您使用HTML显示结果,您应该设置HTML的字符集

     <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
还可以使用iconv php函数将字符集转换为其他字符集

最后,检查表的数据库编码


但是我想在你的例子中,你只需要改变meta标签。

基本上所有的字符集问题都源于它们被混合和/或误解的事实

字符串文本是按特定顺序排列的字节序列。字符串是使用特定的字符集编码的,该字符集本身既不正确也不错误,也没有其他任何东西。问题是,当您尝试读取字符串(字节序列)时,假定字符集错误。例如,使用KS X 1001编码的字节在读取它们时没有意义,假设它们是UTF-8,这就是问号的来源

您从中获取文本的站点以特定的字符集发送给您,让我们假设KS X 1001。假设您自己的站点使用UTF-8。在UTF-8编码文本的中间嵌入表示KS x 1001编码文本的字节流,并告知浏览器将整个站点解释为UTF-8导致KS X 1001编码文本对UTF-8解析器没有意义。
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
将被渲染为

Hey, this is UTF-8 encoded text, awesome!
???????I?have?no?idea?what?this?is???????
Hey, this is UTF-8 encoded text, awesome!

要解决此问题,请将获取的文本转换为UTF-8或您在站点上使用的任何编码。查看另一个站点的内容类型标题,它应该会告诉您该站点的编码方式。如果没有,那就猜猜看。

基本上所有的字符集问题都源于它们被混合和/或误解的事实

字符串文本是按特定顺序排列的字节序列。字符串是使用特定的字符集编码的,该字符集本身既不正确也不错误,也没有其他任何东西。问题是,当您尝试读取字符串(字节序列)时,假定字符集错误。例如,使用KS X 1001编码的字节在读取它们时没有意义,假设它们是UTF-8,这就是问号的来源

您从中获取文本的站点以特定的字符集发送给您,让我们假设KS X 1001。假设您自己的站点使用UTF-8。在UTF-8编码文本的中间嵌入表示KS x 1001编码文本的字节流,并告知浏览器将整个站点解释为UTF-8导致KS X 1001编码文本对UTF-8解析器没有意义。
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
将被渲染为

Hey, this is UTF-8 encoded text, awesome!
???????I?have?no?idea?what?this?is???????
Hey, this is UTF-8 encoded text, awesome!
要解决此问题,请将获取的文本转换为UTF-8或您在站点上使用的任何编码。查看另一个站点的内容类型标题,它应该会告诉您该站点的编码方式。如果没有,请猜一猜。

您需要:

通过按标题或aviv的答案设置内容类型,告诉浏览器您希望在表单提交中接收的编码

使用,告诉数据库您正在向其发送字节的编码

目前,您正在数据库中使用EUC-KR,因此您可能希望在上述两点中使用该编码。在本世纪,我建议在所有web应用程序/数据库中使用UTF-8,因为东亚多字节编码是一种不合时宜的令人不快的做法。如果mysql\u real\u escape\u字符串不知道正确的编码,那么包含“或”的多字节序列可能会通过SQL注入潜行

但是,如果enpang.com使用EUC-KR对名称URL参数进行编码,则需要坚持使用EUC-KR,或者使用iconv将名称值从UTF-8转换为EUC-KR。我不清楚enpang.com在名称检查服务的URL参数中使用了什么编码;无论如何,我总是得到相同的结果。

您需要:

通过按标题或aviv的答案设置内容类型,告诉浏览器您希望在表单提交中接收的编码

使用,告诉数据库您正在向其发送字节的编码

目前你是 在数据库中使用EUC-KR,因此您可能希望在上述两点中使用该编码。在本世纪,我建议在所有web应用程序/数据库中使用UTF-8,因为东亚多字节编码是一种不合时宜的令人不快的做法。如果mysql\u real\u escape\u字符串不知道正确的编码,那么包含“或”的多字节序列可能会通过SQL注入潜行


但是,如果enpang.com使用EUC-KR对名称URL参数进行编码,则需要坚持使用EUC-KR,或者使用iconv将名称值从UTF-8转换为EUC-KR。我不清楚enpang.com在名称检查服务的URL参数中使用了什么编码;无论如何,我总是得到相同的结果。

您的数据库字符集是什么?你的文件集是什么?您的控制台字符集是什么?添加了PHP源代码和SQL转储,请查看它们。PHP与字符集关系不大。我主要负责数据库/html。这个问题太本地化了。无需帮助进一步的读者您的数据库字符集是什么?你的文件集是什么?您的控制台字符集是什么?添加了PHP源代码和SQL转储,请查看它们。PHP与字符集关系不大。我主要负责数据库/html。这个问题太本地化了。没有什么可以帮助进一步的读者实际上meta标签什么也做不了。它必须是HTTP头,而不是HTTP等价surrogate@Col: ? 您完全可以更改浏览器使用的字符集。这就是重点。不过,发送准确的内容类型标题也是一个好主意。仅当缺少真正的HTTP头时才使用。实际上,meta标记无能为力。它必须是HTTP头,而不是HTTP等价surrogate@Col: ? 您完全可以更改浏览器使用的字符集。这就是重点。不过,发送准确的内容类型标题也是一个好主意。只有当真正的HTTP头丢失时才使用。web服务在任何地方都有文档记录吗?我不这么认为。不过,这当然是在他们的注册页面上使用的:我刚刚检查了一下,该页面使用的是euc-kr。啊,我想,您只能使用已知的已使用/未使用用户名进行尝试。除了语音,我不能阅读韩语,所以我不能立即了解如何使用该网站。请注意,在创建URL查询字符串时,应在参数上使用urlencode将其转换为%nn序列。web服务是否在任何地方记录?我不这么认为。不过,这当然是在他们的注册页面上使用的:我刚刚检查了一下,该页面使用的是euc-kr。啊,我想,您只能使用已知的已使用/未使用用户名进行尝试。除了语音,我不能阅读韩语,所以我不能立即了解如何使用该网站。请注意,在创建URL查询字符串时,应在参数上使用urlencode将其转换为%nn序列。