为mailto链接转义字符串的正确方法是什么

bar*_*iir 18 html php url encoding

mailto:在这里有一个链接,包括subject=body=参数,但我不知道如何正确地逃避参数中的数据.

页面是编码的,utf-8所以我想像德语变音符号这样的特殊字符也应编码成utf-8URL的表示形式吗?

目前我正在使用,rawurlencode()因为urlencode()+在空格应该已经存在的所有位置插入字符,但我不确定这是否是正确的方法.

Pau*_*ain 17

您只需要rawurlencode()根据W3C标准在电子邮件地址末尾的链接.

关于urlencode的PHP手册有一个例子(在该页面上搜索mailto):http: //php.net/manual/en/function.urlencode.php

  • 请注意'rawurlencode()'会将&符号转换为&,大多数邮件客户端都无法正确解码.%26应该用'str_replace('&','%26',rawurlencode($ subject))替换这些&符号. (8认同)
  • 带有str_replace代码的@dev_row,`&`将被更改为'%26amp%3B`.你首先**需要用`&`替换`$ amp;`然后再做rawurlencode().另外为什么不使用`htmlspecialchars_decode()`而不是str_replace? (2认同)

ban*_*ing 6

基于已接受的答案及其评论,这是我使用的:

function format_text_for_mailto_param($text) {
    return rawurlencode(htmlspecialchars_decode($text));
}
Run Code Online (Sandbox Code Playgroud)

例:

$email = "someone@example.org";
$subject = "Test Subject";
<a href="mailto:' . $email . '?subject=' . format_text_for_mailto_param($subject) . '">send email</a>
Run Code Online (Sandbox Code Playgroud)