Использование текста SHIFT_JIS в PHP - PullRequest
1 голос
/ 27 мая 2010

Я создаю форму, которая должна принимать символы, закодированные в SHIFT_JIS, а затем отправлять эти результаты по электронной почте получателю. Я попытался просто захватить результаты из переменной $ _POST, а затем вставить их в блок текста следующим образом:

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

Name: $NameJp

...
TEST

но это не похоже на работу (что меня не удивляет). Это моя первая попытка иметь дело с не-ASCII символами в PHP, и я надеюсь, что у людей могут быть какие-то предложения. Возможно, мне не хватает простой функции для кодирования текста.

Кроме того, есть ли другие потенциальные ловушки, с которыми я могу столкнуться?

Спасибо.

1 Ответ

3 голосов
/ 27 мая 2010

Кроме того, есть ли другие потенциальные ловушки, с которыми я могу столкнуться?

Да. :)

Это нормально и хорошо получать текст в SHIFT_JIS, но после этого вам придется обрабатывать его как SHIFT_JIS и сообщать всем остальным, что этот текст находится в SHIFT_JIS. То есть, если вы вставите его в электронное письмо, вам нужно будет установить соответствующие заголовки электронных писем, информирующие клиентов о том, что это электронное письмо содержит текст в SHIFT_JIS. Если вам нужно отобразить его на веб-странице или просто в режиме отладки, вам нужно убедиться, что браузер или среда отладки обрабатывает текст как SHIFT_JIS. Если вы смешаете его с другим текстом, убедитесь, что они в одной кодировке.

Честно говоря, SHIFT_JIS устарел и работать с ним ужасно. Вы должны использовать UTF-8, если это вообще возможно. Если вам абсолютно необходимо принять SHIFT_JIS и проделать большую работу над ним, вы можете преобразовать его в UTF-8 для внутреннего использования и преобразовать обратно в любую выходную кодировку, когда это потребуется. Для этого вы можете использовать iconv.

Заголовки электронной почты являются специальным BTW в том смысле, что они не могут содержать ничего, кроме символов ASCII. Тема электронного письма является частью заголовка. Чтобы отправить не-ASCII символы в качестве строки темы, вам нужно MIME кодировать его, используя mb_encode_mimeheader.

Кроме того, обязательна ссылка на: Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!)

...