在PHP中使用SHIFT_JIS文本

在PHP中使用SHIFT_JIS文本,php,unicode,shift-jis,Php,Unicode,Shift Jis,我正在构建一个表单,需要接受SHIFT_JIS编码的字符,然后通过电子邮件将这些结果发送给收件人。我试图简单地从$\u POST变量中捕获结果,然后将它们插入如下文本块: $NameJp = $_POST['NameJp']; $contents = <<<TEST Name: $NameJp ... TEST $NameJp=$\u POST['NameJp']; $contents= 还有,我可能会遇到其他潜在的陷阱吗 是。:) 在SHIFT_-JIS中接收文本是很好

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

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

Name: $NameJp

...
TEST
$NameJp=$\u POST['NameJp'];
$contents=
还有,我可能会遇到其他潜在的陷阱吗

是。:)

在SHIFT_-JIS中接收文本是很好的,但是在那之后,您必须像SHIFT_-JIS一样处理它,并通知其他人此文本在SHIFT_-JIS中。也就是说,如果您将其插入电子邮件,则需要设置适当的电子邮件标题,通知客户此电子邮件包含SHIFT_JIS中的文本。如果需要在网页上或仅在调试中显示,则需要确保浏览器或调试环境将文本作为SHIFT_JIS处理。如果您将其与其他文本混合,则应确保它们采用相同的编码

老实说,SHIFT_JIS已经过时了,很难使用。如果可能的话,您应该使用UTF-8。如果您确实需要接受SHIFT_JIS并对其进行大量工作,那么您可能希望在内部将其转换为UTF-8,并在必要时将其转换回任何输出编码。你可以用它来做

顺便说一句,电子邮件标题是特殊的,因为它们只能包含ASCII字符。电子邮件的主题是标题的一部分。要将非ASCII字符作为主题行发送,需要使用MIME编码


另外,必须参考:

谢谢您的评论。看起来我确实可以将表单转换为使用UTF-8,这似乎更标准、更受支持。@Joe问题是,SHIFT_JIS仅限于某个字符子集,而UTF-8可以(实际上)表示任何字符。在SHIFT_JIS(或ASCII,或任何有限的字符集)中工作需要非常小心,不要尝试对“无效”字符进行编码。出于这个原因,大多数工具在默认情况下更喜欢Unicode,这意味着您将有一个更平稳的开发过程,但必须注意全面使用UTF-8。除此之外,SHIFT_JIS也应该得到很好的支持。我刚刚设法解决了这个问题。在研究了向表单提交unicode字符的更多细节之后,我发现表单的“accept charset”字段。有一次我指定一切都按预期开始工作。