2012-06-19 38 views
14

Tôi đang ở giai đoạn cuối của mã hóa lại trang web đã sử dụng mã hóa ký tự iso-8859-1 chính thức, nhưng hiện nay là UTF-8.Các ký tự đặc biệt trong UTF8 mailto: subject = link và Outlook

Vấn đề là phần chủ đề của liên kết mailto href không hoạt động với Outlook, khi các ký tự đặc biệt được sử dụng. Tôi nhận được các đại diện nhân vật bị cắt xén thông thường, chỉ ra một vấn đề mã hóa ký tự rõ ràng khi liên kết được nhấp và cửa sổ thư mới bật lên trong triển vọng.

Tôi đã thử rawurlencode() để sửa chữa ths vấn đề, nhưng điều này dường như không làm việc với Outlook ...

<a href="mailto:[email protected]?subject=<?=rawurlencode($subj);?>">send email</a> 

Vì vậy, sau đó nghĩ, Outlook phải nhấn mạnh vào một mã hóa khác nhau, và cố gắng utf-8 giải mã chuỗi chủ đề trước tiên ...

<a href="mailto:[email protected]?subject=<?=rawurlencode(utf8_decode($subj));?>">send email</a> 

Bingo! Hoạt động tuyệt vời Outlook. Nhưng bây giờ không trong mọi thứ khác :(

tôi không thể tìm thấy một giải pháp mà làm việc accross tất cả khách hàng qua thư.

Nó hoạt động tốt trên tất cả các khách hàng mail khi toàn bộ trang được hiển thị trong iso-8859-1. nhưng không phải khi nội dung trang là utf-8.

Thật không may là khách hàng muốn giữ lại liên kết email trực tiếp này, mặc dù có một hình thức email hoạt động trực tiếp bên dưới nó!

có một giải pháp rất vui khi được điều này?

+1

Bạn muốn biến Q của Quoted in để sử dụng trong tiêu đề "chủ đề" (hoặc biến thể B của Base64, nếu không sử dụng bộ siêu mã ASCII 7 bit). Xem RFC MIME. – ninjalj

+0

Tôi nghĩ rằng biến thể Q đang được sử dụng. Từ "véhicule" được chuyển thành "v% C3% A9hicule" trong url liên kết mailto. Vì đó là một URL, điều này sẽ tương đương với "v = C3 = A9hicule" tại ứng dụng thư khách. Nhưng không hiển thị ngay khi tiếp cận Outlook. Tôi nghĩ rằng điều này là do Outlook đang chờ mã hóa iso-8859-1 (trong đó "é" sẽ là "= E9". Nhưng sau đó, điều này không hoạt động trong tất cả các ứng dụng khách khác. – Richt222

Trả lời

9

Nếu bạn sử dụng utf-8 thử điều này:

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?> 
-1

Bạn cần t o séc sau

1) HTML Mã

<meta contentType="text/html; charset=UTF-8"/> 

2) Trình duyệt Setting cho IE View -> Encoding -> Unicode (UTF-8)

3) Nội dung Loại/MIME cần được "application/x-www-form-urlencoded"

+0

1 và 2 đều chứng minh là tích cực. 'không chắc chắn về 3 mặc dù. Tại sao, hoặc những gì, nên được thiết lập để nội dung/loại MIME? Nó không phải là một hình thức, vì vậy tôi là một chút bối rối. – Richt222

0

lý do dòng chủ đề là đôi khi bị cắt xén là bởi vì khi bạn chỉ định một mã hóa, nó không áp dụng đối với các tiêu đề email. Dòng chủ đề của bạn nằm trong tiêu đề email. Dưới đây là một chức năng để áp dụng mã hóa UTF8 trên dòng subject:

function EncodeSubject($_subject) 
{ 
    $encodedSubject = str_replace("&quot;", '"', $_subject); 
    $encodedSubject = preg_replace('/[^x09\x20-\x3C\x3E-\x7E]/e', 'sprintf("=%02X", ord("$0"));', $encodedSubject); 
    $encodedSubject = str_replace(' ', '_', $encodedSubject); 
    return ="?utf-8?q" . $encodedSubject . "?="; 
} 
Các vấn đề liên quan