- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 PHP 发送和阅读电子邮件。到目前为止,我发现我必须使用函数 mb_encode_mimeheader()
对特殊字符进行编码, 但我不必对空格进行编码。
我还发现,地址归档中的括号不起作用:( Is there an error in PHP's imap_fetch_overview()-function when reading headers with brackets? )。例如 PHP 无法使用 header 部分 From: Admin [] <user@mail.tld>
, 但可以阅读标题部分 From: "Admin []" <user@mail.tld>
.
因此,显然括号在邮件 header 中具有特殊含义(至少对于 PHP 而言)。 Mailheader 中的特殊字符有哪些,它们的含义是什么,它们需要在哪里编码/引用?
例如,PHP 在主题中使用括号没有问题,尽管主题也是标题的一部分。
引号似乎可以帮助我解决问题(https://www.rfc-editor.org/rfc/rfc5322#section-3.2.4 - 我仍然不能 100% 确定这是 PHP 问题还是邮件头不正确)。 但是如何使用引号,引号转义了什么?
在https://www.rfc-editor.org/rfc/rfc5322#section-3.2.4它说:
Strings of characters that include characters other than thoseallowed in atoms can be represented in a quoted string format, wherethe characters are surrounded by quote (DQUOTE, ASCII value 34)characters.
那么,我现在应该自己“转义/引用”每个字符
From: Admin "[""]" <user@mail.tld>
还是将所有内容一起引用可以吗?
From: "Admin []" <user@mail.tld>
但是,如果其他控制序列包含在引号中会发生什么?例如我有特殊字符 ÄÖÜ
在我的字符串中,编码为 =?UTF-8?B?w4PChMODwpbDg8Kc?=
. 那么,根据 RFC,'quoted AND encoded' 字符串仍然可以吗?
From: "Admin [=?UTF-8?B?w4PChMODwpbDg8Kc?=]" <user@mail.tld>
最佳答案
如果您有 RFC2047,您不妨将整个 header 编码为 RFC2047 而忘记引用。
显然您已经找到了 RFC5322,它是关于需要引用的内容和原因的权威来源。基本上,如果不是电子邮件地址的一部分,则任何具有电子邮件地址含义的内容都需要引用。传统的引用机制是反斜杠和/或双引号,但使用 MIME,您可以使用可用的 MIME 编码轻松地透明地对所有内容进行编码。
您提供的链接解释了“原子”中不允许使用的字符需要引号。原子中允许的字符列表在上一节中。
ALPHA / DIGIT / ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials. Used for atoms.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
如果你对照 ASCII 表进行交叉检查,你会得到
32 (space) not OK
33 ! OK
34 " not OK
35 # through $%& 38 OK
39 ' through () 41 not OK
42 * through + 43 OK
44 , not OK
45 - OK
46 . not OK
47 / through 0123456789 57 OK
58 : through ;< 60 not OK
61 = OK
62 > not OK
63 ? OK
64 @ not OK
65 A through BCD...XYZ 90 OK
91 [ through \] 93 not OK
94 ^ through _ 95 OK
96 ` not OK
97 a through bcd...xyz{|}~ 126 OK
127 DEL not OK
在某些情况下,允许不加引号的集合“点原子”,即上述加点(句点、句点、ASCII 46)。
有些客户显然过于谨慎(有些客户会简单地将所有内容放在双引号中,就好像您的真实姓名不是您的真实姓名一样。这很糟糕)。
我的理解是,在允许原子的情况下允许使用 RFC2047 序列,但这意味着它不能与另一个原子相邻。无论如何,我会逃避并建议不要尝试将引用和 RFC2047 包装混合在同一个标头中,而不是可能弄清楚它们是如何相互作用的(然后可能会发现您的解释不是镇上唯一的游戏,要么是因为其他人做了弄清楚时出错,或者因为对规范有多种有效解释)。
关于php - 电子邮件标题中的特殊字符是什么以及何时使用引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008720/
我有一个类似 ( www.bbcurdu.com) 的网站。现在我的问题是,当我添加一个带有引号或引号的新故事时,它不会保存在数据库中。如果我删除这些逗号或引号,那么它将保存在数据库中。并正确获取和显
我正在使用(并坚持使用)以下版本的 Ruby: ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux] 我尝试了很多谷歌搜索,但找不到解决我的问题的
我有以下示例数据, 我想连接 string1 和 string2 以产生连接结果 "a""b" 使用连接函数 我在官方的microsoft excel文档中没有找到任何答案 https://suppo
我是 SQL-mySQL 方面的 super 新手,我想查询这些包含具有特定值的列的条目,但该值中已经有引号,它实际上看起来像这样,引号已经存在:“荷兰鹿特丹 Voor Land-en Volkenk
是否有一个简单的正则表达式来匹配所有 unicode 引号?还是必须像这样手动编码: quotes = ur"[\"'\u2018\u2019\u201c\u201d]" 感谢阅读。 布莱恩 最佳答案
我有下面的代码,禁止将特殊字符插入到 HTML 表单上提交的文本中。 可以看出,我需要禁用的特殊字符位于引号之间,而我需要禁用引号 " 本身,但我不能这样做,因为如果我添加另一个中间的引号然后读起来就
对于给定的输入字符串 abc,[def,ghi,ijk],lm,(no,pq,rs),[tu,vw,xy],zs,"as,as,fr"输出应该是 abc [def,ghi,ijk] lm (no,pq
下午好,快乐 4 我在处理一些 javascript 时遇到了问题....我是一个初学者,正在使用这个特定的在线示例来了解如何淡入和淡出多个引号... 我已经实现了 HTML/Javascript/C
我想在一段文本周围加上引号。文本不能超过 3 行:如果超过,我想要一个省略号(并且我仍然想要引号)。我附上我现在拥有的东西。我的解决方案使用 JS:虽然纯 CSS 解决方案是理想的,但可能的 CSS
我将它发送给一个函数,我想在下面的变量值周围加上双引号,例如 $var = "New York"(注意引号) $fq.=" + area:$state"; 所以当我回显 $state 时我想用双
这个问题在这里已经有了答案: How can I make Java print quotes, like "Hello"? (11 个答案) 关闭 9 年前。 我想在 java 中打印反引号。但是
我认为这是 F# 的一个众所周知的限制,但我找不到任何好的解决方法…… 所以,这里是代码(我试图让它尽可能简单,所以它可能看起来没有任何意义): [] type Human (makeAName: u
我在Windows 7上,在Apache 2.4上使用PHP 5.6.14版:我必须使用PHP在SQLite3数据库上构建查询选择。 NOTA:我是PHP的再见..... 我的代码如下 '; echo
在 jQuery 文档中,大多数字符串都是使用单引号“声明”的。包括documentation用于 jQuery UI。 那为什么不呢 $(".datepicker").datepicker({ da
我正在尝试在 Java 中使用以下正则表达式,它应该与任何 lang="2-char-lang-name" 匹配: String lang = "lang=\"" + L.detectLang(inp
我试图在 more 之后插入一个 block 引用指令,不接受任何参数: First paragraph. .. more:: Blockquote here! -- Author S
我从外部进程获得了一些我无法更改的 JSON,并且我需要修改此 JSON 字符串才能使下游 Java 进程正常工作。 JSON 字符串如下所示: {"widgets":"blah","is_dog":
我试图在从数据库读取数据后生成 CSV 文件。现在单个数据可以包含逗号、单引号和双引号。 请告诉我如何在正则表达式的帮助下处理这种情况。 最佳答案 您可以为 CSV 文件使用不同的分隔符吗?也许是一个
我尝试在 codemodel(Sun) 中创建下一个表达式: driver.findElement(By.xpath("//div[text()=\""+whatToclick+"\"]/pare
我需要知道报价和列表之间的区别。例如: cl-prompt> (equal (first (list * 1 2)) *) T cl-prompt> (equal (first '(* 1 2)) *
我是一名优秀的程序员,十分优秀!