2009-06-12 2 views
15

Có cách nào để làm cho ứng dụng email (Outlook) chấp nhận các ký tự đặc biệt đến từ liên kết mailto trong html không? Tôi đang cố gắng để có một liên kết mailto với các ký tự Đức trong cơ thể, nhưng trong Outlook tôi chỉ nhận được các ký tự lạ.mailto ký tự đặc biệt

Cảm ơn

+1

Tôi có cùng một vấn đề . Bạn có thể chọn một aswer hoặc đăng của riêng bạn? – AyexeM

Trả lời

0

Có vẻ như bạn cần trang chứa liên kết mailto nằm trong mã hóa mà Outlook đang mong đợi. Nếu không biết thêm về tình huống này, tôi sẽ thử mã hóa trang bằng UTF-8 và ISO-8859-1.

'Thông tin thêm về tình huống' có liên quan sẽ là những ký tự lạ xuất hiện và mã hóa của trang hiện tại là gì.

3

Tôi nghĩ sử dụng phương pháp urlencode nên làm những gì bạn đang tìm kiếm. JavaScript có các phương thức .encodeURI() trên các đối tượng chuỗi và .NET có phương thức HttpUtility.UrlEncode.

Bạn đang sử dụng ngôn ngữ nào?

+0

Tôi đang sử dụng UrlEncode với Dao cạo. Bạn có bất kỳ ý tưởng nào về @John này không? http://stackoverflow.com/questions/33097643/mailto-link-encoding-in-mvc-razor –

19

Tôi vừa dành 2 ngày điều tra vấn đề này. Vấn đề của chúng tôi là các liên kết mailto: trên các trang web được mã hóa utf-8 của chúng tôi không hoạt động đối với người dùng Outlook nếu chuỗi chủ đề = chứa các ký tự không phải ascii, ví dụ như các ký tự Na Uy. Ví dụ: "mailto: [email protected]? Subject = julegløgg og fårikål"

Từ những gì tôi đã học cho đến nay, Outlook không xử lý bất kỳ điều gì khác ngoài ASCII và ký tự iso-8859-1. Vì vậy, khi cố gắng nhấp vào liên kết mailto ở trên (hoặc từ IE hoặc Firefox), Outlook không giải mã được các ký tự, để đối tượng bị hỏng và chứa các ký tự "lạ".

Vì vậy, bước tiếp theo là cố gắng mã hóa lại các trang trong ISO-8859-1. Những gì chúng ta làm là thay thế các liên kết mailto gốc trên trang utf-8 với một liên kết đến một "email-to-iso" -service, như thế này:

http://url.com/service.php?service=util.mailtoencode&mailto=mail%40coretrek.no%3Fsubject%3Demne+%C3%B8%C3%A6%C3%A5+emne

Trang này sẽ chuyển đổi các nhân vật mailto đến iso-8859-1 và sau đó xuất toàn bộ nội dung trang trong iso-8859-1. Một javascript trên trang, có chứa "location.href = 'mailto: ...'" được sử dụng để tự động mở ứng dụng email của khách hàng.

Cho đến giờ mọi thứ đều ổn. Điều này thực sự hoạt động trong Internet Explorer, cả với Thunderbird và Outlook (được thử nghiệm trên IE7 trên WinXP với Outlook express và TB 2).

NHƯNG vấn đề hiện tại thực sự là Firefox. Có vẻ như Firefox không thể giải mã các url được mã hóa url chứa các ký tự chỉ tìm thấy trong ISO-8859-1 nhưng không phải trong ASCII (như là Na Uy, được đại diện bởi% E5 khi được mã hóa). Cùng một å được xử lý đúng nếu mã hóa trang là utf-8, nhưng có vẻ như các nhà phát triển Firefox đã quên thử nghiệm các ký tự đặc biệt cùng với bộ ký tự ISO-8859-1. Kết quả là Firefox chuyển một chuỗi chưa giải mã (vẫn còn chứa% E5 intstead của å) cho ứng dụng email. Và, đáng ngạc nhiên, điều này được xử lý đúng bởi Outlook (mà quản lý để giải mã chuỗi chính nó), nhưng không phải bởi Thunderbird, mà có thể có lỗi tương tự như Firefox. Nếu bạn KHÔNG mã hóa url chủ đề, chuỗi được chuyển chính xác đến Thunderbird, nhưng không được chuyển tới Outlook.

Chúng tôi cũng đã thử các phương pháp mã hóa khác, như htmlentities, htmlspecialchars, mã hóa base64 của php, nhưng tất cả đều không thành công theo cách này hay cách khác.

Vì vậy, tóm tắt:

trang mã hóa trong utf-8:

IE luôn thất bại

FF -> Thunderbird: OK

FF -> Outlook: FAIL

Các trang được mã hóa trong iso-8859-1:

IE: OK

FF -> Thunderbird: Thất bại nếu đối tượng là url mã hóa, ok nếu không muốn nói)

FF -> Outlook: Thất bại nếu đối tượng không được URL mã hóa, ok nếu mã hóa) (đây là Windows, trên Ubuntu Linux FF và TB hoạt động OK luôn).

Hy vọng điều này hữu ích cho những người khác có cùng vấn đề.

10

Trong PHP Tôi nghĩ rằng các chức năng phù hợp nhất với Outlook là rawurlencode()

+0

Tôi chỉ tìm ra điều này, sau khi thử tất cả các loại phương pháp khác. +1 – yuttadhammo

+0

+1, đã làm công việc cho tôi. – phemios

+0

Hoạt động như một nét duyên dáng :-) –

2

Bạn cần phải cho phép hỗ trợ UTF-8 cho mailto: giao thức

Từ cửa sổ chính của Outlook, nhấn Tools -> Tùy chọn -> định dạng thư -> tùy chọn quốc tế -> "Bật hỗ trợ UTF-8 cho giao thức mailto:".

+1

Than ôi, khi bạn thiết kế trang web có thể cần ký tự đặc biệt trong mailto :, bạn không có quyền kiểm soát cấu hình của những người khác nhau mà bạn hy vọng sẽ nhấp vào liên kết. – ghoti

+0

@ghoti Still. Đó là một giải pháp làm việc. –

2

rawurlencode() chức năng hoạt động tốt nhất với outlook, thử nghiệm với trình duyệt Firefox, Chrome & IE

+0

Đây là câu trả lời tương tự như được cung cấp bởi Mario Chueca trong năm 2010. – jogojapan

+0

Làm việc như một sự quyến rũ, cảm ơn bạn! :-) –

1

Như yandr chỉ ra, vấn đề này là một vấn đề đang diễn ra với Outlook.

Microsoft có published documentation tuyên bố rằng cấu hình đúng Outlook 2003 và 2007 được đính kèm với máy chủ Exchange được cấu hình đúng sẽ mặc định hỗ trợ Unicode, nhưng điều đó không thực sự giúp bạn với công chúng.

Để tham chiếu, "tiêu chuẩn" bạn muốn tham chiếu cho điều này là RFC 2047.

Giải pháp mà tôi đã thực hiện để vượt qua giới hạn này (với tiếng Thụy Điển, thực sự) là sử dụng biểu mẫu web thay vì liên kết mailto :. Nó đòi hỏi nhiều thiết lập hơn ở phía máy chủ, nhưng cho phép bạn kiểm soát nhiều hơn quá trình liên lạc.

Tôi chắc chắn đây không phải là những gì bạn muốn nghe, nhưng cho đến khi thế giới ngừng sử dụng phần mềm bị hỏng từ Microsoft, chúng tôi sẽ tiếp tục cần giải pháp như thế này.

0

Nếu một người dùng SharePoint 2010, có vẻ như Microsoft đã biết vấn đề này và đã cung cấp một số chức năng để giải quyết vấn đề này.

Sau đây sẽ đúng cách thoát khỏi liên kết tới trang hiện tại

escapeProperly (escapeProperlyCoreCore ($ (địa điểm) .attr ('href'), false, false, true))