在PHP中使用SHIFT_JIS文本

时间:2010-05-27 01:49:31

标签: php unicode shift-jis

我正在构建一个表单,需要接受在SHIFT_JIS中编码的字符,然后通过电子邮件将这些结果发送给收件人。我试图简单地从$ _POST变量中捕获结果,然后将它们插入到这样的文本块中:

$NameJp = $_POST['NameJp'];
$contents = <<<TEST

Name: $NameJp

...
TEST

但这似乎不起作用(这并不让我感到惊讶)。这是我第一次尝试处理PHP中的非ASCII字符,我希望人们可能会有一些建议。也许我错过了一个简单的函数来编码文本。

此外,我可能遇到任何其他潜在的陷阱吗?

感谢。

1 个答案:

答案 0 :(得分:3)

  

此外,我可能遇到任何其他潜在的陷阱吗?

是。 :)

在SHIFT_JIS中接收文本一切都很好,但是你必须像SHIFT_JIS一样处理它,并告知其他人这个文本在SHIFT_JIS中。即,如果您将其插入电子邮件,则需要设置适当的电子邮件标头,通知客户此电子邮件包含SHIFT_JIS中的文本。如果您需要在网页上或仅在调试中显示它,您需要确保浏览器或调试环境将文本处理为SHIFT_JIS。如果将其与其他文本混合使用,则应确保它们采用相同的编码。

老实说,SHIFT_JIS过时而且很糟糕。如果可能的话,你应该使用UTF-8。如果您绝对需要接受SHIFT_JIS并对其进行大量工作,您可能需要在内部将其转换为UTF-8并将其转换回任何时间输出编码。您可以使用iconv来执行此操作。

电子邮件标题是特殊的BTW,因为除了ASCII字符外,它们不能包含任何内容。电子邮件的主题是标题的一部分。要将非ASCII字符作为主题行发送,您需要使用mb_encode_mimeheader对其进行MIME编码。

此外,必须参考:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)