2010-07-29 67 views
1

我使用MySQL数据库在PHP中制作KSSN(韩文ID号码)检查器。 我通过使用file_get_contents调用外部网站来检查它是否正在工作。如何让PHP使用正确的字符集?

问题是请求(与他们的韩文/韩文字符)正在使用错误的字符集。 当我回显字符串时,韩文字符会被问号所代替。

我该如何使用韩语?我是否应该更改数据库中的任何内容? 字符集应该是什么?

PHP源代码和SQL转储:http://www.multiupload.com/RJ93RASZ31

注:我使用的Apache(HTML),不CLI。

+2

什么是数据库字符集? 什么是你的文件字符集? 你的控制台字符集是什么? – 2010-07-29 09:28:27

+0

添加了PHP源代码和SQL转储,请看看它们。 – lesderid 2010-07-29 09:30:47

+0

PHP与charsets很少有关系。我主要是数据库/ html责任 – 2010-07-29 09:32:13

回答

2

您需要:

  1. 告诉浏览您希望收到的表单提交,通过设置由头部Content-Type<meta>在特拉维夫的答案是什么编码。

  2. 使用mysql_set_charset()告诉数据库你正在发送什么编码字节。

当前您在数据库中使用EUC-KR,因此大概您希望在上述两点中使用该编码。在本世纪,我会建议在所有的网络应用/数据库中使用UTF-8,因为东亚多字节编码是一个不合时宜的错误。 (随着潜在的安全隐患,因为如果mysql_real_escape_string不知道正确的编码,将含有'\可以通过SQL注入潜入一个多字节序列。)

然而,如果enpang.com使用EUC-KR对于编码在Name URL参数中,您需要使用EUC-KR,或者使用iconv()将名称值从UTF-8转换为EUC-KR。 (我不清楚enpang.com是使用URL参数对其名称检查服务进行编码的,我总是得到相同的结果。)

+0

恩,那就是问题所在。我不知道他们正在使用哪种编码.. – lesderid 2010-07-29 09:58:07

+1

是否在任何地方记录了Web服务? – bobince 2010-07-29 09:58:48

+0

我不这么认为。然而,这是在他们的注册页面上使用的:http://join.enpang.com/member/joinStep1.asp 我刚刚检查,该页面正在使用euc-kr。 – lesderid 2010-07-29 10:02:45

1

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

 <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> 

您也可以使用iconv(PHP函数)的字符集的字符集转换到不同的字符集 http://php.net/manual/en/book.iconv.php

最后但并非最不重要的,检查您的数据库编码的表。

但我想你的情况下,你只需要改变元标记。

+1

实际上meta标签无能为力。它必须是** HTTP **标题,而不是http-equiv替代品 – 2010-07-29 09:34:11

+1

@Col:?您可以*更改浏览器从中使用的字符集。这就是整个问题。发送一个精确的'Content-Type'头文件*也是一个好主意。 – bobince 2010-07-29 09:41:57

+2

''仅在真实HTTP标头*缺失*时使用。 – Quentin 2010-07-29 09:47:23

1

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

字符串(文本)是按特定顺序的字节序列。字符串使用一些特定的字符集进行编码,本身既不是正确也不是错误,也不是其他任何东西。问题是当你试图读取字符串,字节序列,假设错误的字符集。例如,使用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! 

为了解决这个问题,convert所获取的文本为UTF-8(或您在使用网站上的任何编码)。看看其他网站的Content-Type标题,它应该告诉你网站是什么编码。如果不是,请猜测。

相关问题