如何让PHP使用正确的字符集?
我使用MySQL数据库在PHP中制作KSSN(韩文ID号码)检查器。 我通过使用file_get_contents调用外部网站来检查它是否正在工作。如何让PHP使用正确的字符集?
问题是请求(与他们的韩文/韩文字符)正在使用错误的字符集。 当我回显字符串时,韩文字符会被问号所代替。
我该如何使用韩语?我是否应该更改数据库中的任何内容? 字符集应该是什么?
PHP源代码和SQL转储:http://www.multiupload.com/RJ93RASZ31
注:我使用的Apache(HTML),不CLI。
您需要:
告诉浏览您希望收到的表单提交,通过设置由头部
Content-Type
或<meta>
在特拉维夫的答案是什么编码。使用
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参数对其名称检查服务进行编码的,我总是得到相同的结果。)
我不知道的字符集,但如果您使用HTML来显示结果,你应该设置HTML
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
您也可以使用iconv(PHP函数)的字符集的字符集转换到不同的字符集 http://php.net/manual/en/book.iconv.php
最后但并非最不重要的,检查您的数据库编码的表。
但我想你的情况下,你只需要改变元标记。
基本上所有的字符集问题都源于它们被混合和/或曲解的事实。
字符串(文本)是按特定顺序的字节序列。字符串使用一些特定的字符集进行编码,本身既不是正确也不是错误,也不是其他任何东西。问题是当你试图读取字符串,字节序列,假设错误的字符集。例如,使用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
标题,它应该告诉你网站是什么编码。如果不是,请猜测。
什么是数据库字符集? 什么是你的文件字符集? 你的控制台字符集是什么? – 2010-07-29 09:28:27
添加了PHP源代码和SQL转储,请看看它们。 – lesderid 2010-07-29 09:30:47
PHP与charsets很少有关系。我主要是数据库/ html责任 – 2010-07-29 09:32:13