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

时间:2010-07-29 09:22:36

标签: php mysql character-encoding

我正在使用MySQL数据库在PHP中创建一个KSSN(韩国ID号)检查器。 我通过使用对外部站点的file_get_contents调用来检查它是否正常工作。

问题是请求(包含韩文/韩文字符)使用了错误的字符集。 当我回显字符串时,韩文字符会被问号替换。

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

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

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

3 个答案:

答案 0 :(得分:2)

你需要:

  1. 通过标题提交Content-Type或aviv的答案设置<meta>,告诉浏览器您希望在表单提交中接收哪种编码。

  2. 使用mysql_set_charset()告诉数据库您使用{{3}}发送字节的编码。

  3. 目前您在数据库中使用EUC-KR,因此您可能希望在上述两点中使用该编码。在本世纪,我建议在所有网络应用程序/数据库中使用UTF-8,因为东亚多字节编码是不合时宜的不愉快。 (由于潜在的安全隐患,好像mysql_real_escape_string不知道正确的编码,包含'\的多字节序列可以潜入SQL注入。)

    但是,如果enpang.com使用EUC-KR来编码Name URL参数,您需要坚持使用EUC-KR,或者将名称值从UTF-8转码为EUC- KR使用iconv()为此目的。 (我不清楚enpang.com使用什么编码将URL参数用于他们的名称检查服务;无论如何我总是得到相同的结果。)

答案 1 :(得分:1)

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

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

您还可以使用iconv(php函数)将charset转换为其他字符集 http://php.net/manual/en/book.iconv.php

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

但我认为在您的情况下,您只需要更改元标记。

答案 2 :(得分: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标题,应该告诉您网站的编码。如果没有,请猜猜。