我正在构建一个表单,需要接受在SHIFT_JIS中编码的字符,然后通过电子邮件将这些结果发送给收件人。我试图简单地从$ _POST变量中捕获结果,然后将它们插入到这样的文本块中:
$NameJp = $_POST['NameJp'];
$contents = <<<TEST
Name: $NameJp
...
TEST
但这似乎不起作用(这并不让我感到惊讶)。这是我第一次尝试处理PHP中的非ASCII字符,我希望人们可能会有一些建议。也许我错过了一个简单的函数来编码文本。
此外,我可能遇到任何其他潜在的陷阱吗?
感谢。
答案 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编码。