1

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

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

Name: $NameJp

...
TEST

但这似乎不起作用(这并不让我感到惊讶)。这是我第一次尝试在 PHP 中处理非 ASCII 字符,我希望人们可以提出一些建议。也许我缺少一个对文本进行编码的简单函数。

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

谢谢。

4

1 回答 1

3

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

是的。:)

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

老实说,SHIFT_JIS 已经过时且难以使用。如果可能,您应该使用 UTF-8。如果您绝对肯定需要接受 SHIFT_JIS 并对其进行大量工作,您可能希望在内部将其转换为 UTF-8,并在时机成熟时将其转换回任何必要的输出编码。你可以使用iconv这样做。

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

此外,强制性参考:每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)

于 2010-05-27T02:09:18.360 回答