Microsoft Outlook输出中的隐藏字符导致PHP';s json_编码无法正常工作
我继承了一个MySQL数据库,其中包含在Microsoft Outlook(Windows和Mac OS X版本)中生成的电子邮件主题和邮件正文。Microsoft Outlook输出中的隐藏字符导致PHP';s json_编码无法正常工作,php,json,outlook,whitespace,Php,Json,Outlook,Whitespace,我继承了一个MySQL数据库,其中包含在Microsoft Outlook(Windows和Mac OS X版本)中生成的电子邮件主题和邮件正文。 当我尝试使用PHP从DB中提取消息体,然后在其上运行json\u encode时,json中有许多(非转义)换行符,从而使输出无效 我以前从未见过这种情况,但在进一步调查后,我意识到换行符的每个实例都位于标记和标记之间,它们之间(似乎)除了换行符之外什么都没有 然后我运行preg_match来捕获一组style标记之间的空格/换行符。这样做并对结果运
当我尝试使用PHP从DB中提取消息体,然后在其上运行
json\u encode
时,json中有许多(非转义)换行符,从而使输出无效
我以前从未见过这种情况,但在进一步调查后,我意识到换行符的每个实例都位于
标记和
标记之间,它们之间(似乎)除了换行符之外什么都没有
然后我运行preg_match
来捕获一组style
标记之间的空格/换行符。这样做并对结果运行strlen
,我得到了编号2460
然后,我循环遍历捕获的“空白”中的每个字符,并尝试输出它们。起初,我只看到空白,但当我在每个字符之间添加“\n”
时,我突然看到以下输出(减去一些可能的前导和尾随空白):
<
!
-
-
/
*
F
o
N
T
D
E
F
我
N
我
T
我
o
N
s
*
/
@
F
o
N
T
-
F
A.
C
E
{
F
o
N
T
-
F
A.
M
我
L
Y
:
H
E
L
v
E
T
我
C
A.
;
P
A.
N
o
s
E
-
1.
:
2.
1.
1.
6.
4.
2.
2.
2.
2.
2.
4.
;
}
@
F
o
N
T
-
F
A.
C
E
{
F
o
N
T
-
F
A.
M
我
L
Y
:
H
E
L
v
E
T
我
C
A.
;
P
A.
N
o
s
E
-
1.
:
2.
1.
1.
6.
4.
2.
2.
2.
2.
2.
4.
;
}
@
F
o
N
T
-
F
A.
C
E
{
F
o
N
T
-
F
A.
M
我
L
Y
:
C
A.
L
我
B
R
我
;
P
A.
N
o
s
E
-
1.
:
2.
1.
5.
5.
2.
2.
2.
4.
3.
2.
4.
;
}
@
F
o
N
T
-
F
A.
C
E
{
F
o
N
T
-
F
A.
M
我
L
Y
:
T
A.
H
o
M
A.
;
P
A.
N
o
s
E
-
1.
:
2.
1.
1.
6.
4.
3.
5.
4.
4.
2.
4.
;
}
@
F
o
N
T
-
F
A.
C
E
{
F
o
N
T
-
F
A.
M
我
L
Y
:
C
o
N
s
o
L
A.
s
;
P
A.
N
o
s
E
-
1.
:
2.
1.
1.
6.
9
2.
2.
4.
3.
2.
4.
;
}
/
*
s
T
Y
L
E
D
E
F
我
N
我
T
我
o
N
s
*
/
P
.
M
s
o
N
o
R
M
A.
L
,
L
我
.
M
s
o
N
o
R
M
A.
L
,
D
我
v
.
M
s
o
N
o
R
M
A.
L
{
M
A.
R
G
我
N
:
0
我
N
;
M
A.
R
G
我
N
-
B
o
T
T
o
M
:
.
0
0
0
1.
P
T
;
F
o
N
T
-
s
我
Z
E
:
1.
2.
.
0
P
T
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
T
我
M
E
s
N
E
W
R
o
M
A.
N
"
,
"
s
E
R
我
F
"
;
}
A.
:
L
我
N
K
,
s
P
A.
N
.
M
s
o
H
Y
P
E
R
L
我
N
K
{
M
s
o
-
s
T
Y
L
E
-
P
R
我
o
R
我
T
Y
:
9
9
;
C
o
L
o
R
:
B
L
U
E
;
T
E
x
T
-
D
E
C
o
R
A.
T
我
o
N
:
U
N
D
E
R
L
我
N
E
;
}
A.
:
v
我
s
我
T
E
D
,
s
P
A.
N
.
M
s
o
H
Y
P
E
R
L
我
N
K
F
o
L
L
o
W
E
D
{
M
s
o
-
s
T
Y
L
E
-
P
R
我
o
R
我
T
Y
:
9
9
;
C
o
L
o
R
:
P
U
R
P
L
E
;
T
E
x
T
-
D
E
C
o
R
A.
T
我
o
N
:
U
N
D
E
R
L
我
N
E
;
}
P
.
M
s
o
P
L
A.
我
N
T
E
x
T
,
L
我
.
M
s
o
P
L
A.
我
N
T
E
x
T
,
D
我
v
.
M
s
o
P
L
A.
我
N
T
E
x
T
{
M
s
o
-
s
T
Y
L
E
-
P
R
我
o
R
我
T
Y
:
9
9
;
M
s
o
-
s
T
Y
L
E
-
L
我
N
K
:
"
P
L
A.
我
N
T
E
x
T
C
H
A.
R
"
;
M
A.
R
G
我
N
:
0
我
N
;
M
A.
R
G
我
N
-
B
o
T
T
o
M
:
.
0
0
0
1.
P
T
;
F
o
N
T
-
s
我
Z
E
:
1.
0
.
5.
P
T
;
F
o
N
T
-
F
A.
M
我
L
Y
:
C
o
N
s
o
L
A.
s
;
}
P
{
M
s
o
-
s
T
Y
L
E
-
P
R
我
o
R
我
T
Y
:
9
9
;
M
A.
R
G
我
N
:
0
我
N
;
M
A.
R
G
我
N
-
B
o
T
T
o
M
:
.
0
0
0
1.
P
T
;
F
o
N
T
-
s
我
Z
E
:
1.
2.
.
0
P
T
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
T
我
M
E
s
N
E
W
R
o
M
A.
N
"
,
"
s
E
R
我
F
"
;
}
P
.
M
s
o
A.
C
E
T
A.
T
E
,
L
我
.
M
s
o
A.
C
E
T
A.
T
E
,
D
我
v
.
M
s
o
A.
C
E
T
A.
T
E
{
M
s
o
-
s
T
Y
L
E
-
P
R
我
o
R
我
T
Y
:
9
9
;
M
s
o
-
s
T
Y
L
E
-
L
我
N
K
:
"
B
A.
L
L
o
o
N
T
E
x
T
C
H
A.
R
"
;
M
A.
R
G
我
N
:
0
我
N
;
M
A.
R
G
我
N
-
B
o
T
T
o
M
:
.
0
0
0
1.
P
T
;
F
o
N
T
-
s
我
Z
E
:
8.
.
0
P
T
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
T
A.
H
o
M
A.
"
,
"
s
A.
N
s
-
s
E
R
我
F
"
;
}
s
P
A.
N
.
P
L
A.
我
N
T
E
x
T
C
H
A.
R
{
M
s
o
-
s
T
Y
L
E
-
N
A.
M
E
:
"
P
L
A.
我
N
T
E
x
T
C
H
A.
R
"
;
M
s
o
-
s
T
Y
L
E
-
P
R
我
o
R
我
T
Y
:
9
9
;
M
s
o
-
s
T
Y
L
E
-
L
我
N
K
:
"
P
L
A.
我
N
T
E
x
T
"
;
F
o
N
T
-
F
A.
M
我
L
Y
:
C
o
N
s
o
L
A.
s
;
}
s
P
A.
N
.
B
A.
L
L
o
o
N
T
E
x
T
C
H
A.
R
{
M
s
o
-
s
T
Y
L
E
-
N
A.
M
E
:
"
B
A.
L
L
o
o
N
T
E
x
T
C
H
A.
R
"
;
M
s
o
-
s
T
Y
L
E
-
P
R
我
o
R
我
T
Y
:
9
9
;
M
s
o
-
s
T
Y
L
E
-
L
我
N
K
:
"
B
A.
L
L
o
o
N
T
E
x
T
"
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
T
A.
H
o
M
A.
"
,
"
s
A.
N
s
-
s
E
R
我
F
"
;
}
P
.
M
s
o
C
H
P
D
E
F
A.
U
L
T
,
L
我
.
M
s
o
C
H
P
D
E
F
A.
U
L
T
,
D
我
v
.
M
s
o
C
H
P
D
E
F
A.
U
L
T
{
M
s
o
-
s
T
Y
L
E
-
N
A.
M
E
:
M
s
o
C
H
P
D
E
F
A.
U
L
T
;
M
A.
R
G
我
N
:
0
我
N
;
M
A.
R
G
我
N
-
B
o
T
T
o
M
:
.
0
0
0
1.
P
T
;
F
o
N
T
-
s
我
Z
E
:
1.
0
.
0
P
T
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
T
我
M
E
s
N
E
W
R
o
M
A.
N
"
,
"
s
E
R
我
F
"
;
}
s
P
A.
N
.
P
L
A.
我
N
T
E
x
T
C
H
A.
R
0
{
M
s
o
-
s
T
Y
L
E
-
N
A.
M
E
:
P
L
A.
我
N
T
E
x
T
C
H
A.
R
;
F
o
N
T
-
F
A.
M
我
L
Y
:
C
o
N
s
o
L
A.
s
;
}
s
P
A.
N
.
B
A.
L
L
o
o
N
T
E
x
T
C
H
A.
R
0
{
M
s
o
-
s
T
Y
L
E
-
N
A.
M
E
:
B
A.
L
L
o
o
N
T
E
x
T
C
H
A.
R
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
T
A.
H
o
M
A.
"
,
"
s
A.
N
s
-
s
E
R
我
F
"
;
}
s
P
A.
N
.
E
M
A.
我
L
s
T
Y
L
E
2.
2.
{
M
s
o
-
s
T
Y
L
E
-
N
A.
M
E
:
E
M
A.
我
L
s
T
Y
L
E
2.
2.
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
C
A.
L
我
B
R
我
"
,
"
s
A.
N
s
-
s
E
R
我
F
"
;
C
o
L
o
R
:
B
L
A.
C
K
;
}
s
P
A.
N
.
E
M
A.
我
L
s
T
Y
L
E
2.
3.
{
M
s
o
-
s
T
Y
L
E
-
N
A.
M
E
:
E
M
A.
我
L
s
T
Y
L
E
2.
3.
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
C
A.
L
我
B
R
我
"
,
"
s
A.
N
s
-
s
E
R
我
F
"
;
C
o
L
o
R
:
#
1.
F
4.
9
7.
D
;
}
s
P
A.
N
.
E
M
A.
我
L
s
T
Y
L
E
2.
7.
{
M
s
o
-
s
T
Y
L
E
-
T
Y
P
E
:
P
E
R
s
o
N
A.
L
-
R
E
P
L
Y
;
F
o
N
T
-
F
A.
M
我
L
Y
:
"
C
A.
L
我
B
R
我
"
,
"
s
A.
N
s
-
s
E
R
我
F
"
;
C
o
L
o
R
:
#
1.
F
4.
9
7.
D
;
}
.
M
s
o
C
H
P
D
E
F
A.
U
L
T
{
M
s
o
-
s
T
Y
L
E
-
T
Y
P
E
:
E
x
P
o
R
T
-
o
N
L
Y
;
F
o
N
T
-
s
我
Z
E
:
1.
0
.
0
P
T
;
}
@
P
A.
G
E
W
o
R
D
s
E
C
T
我
o
N
1.
{
s
我
Z
E
:
8.
.
5.
我
N
1.
1.
.
0
我
N
;
M
A.
R
G
我
N
:
1.
.
0
我
N
1.
.
0
我
N
1.
.
0
我
N
1.
.
0
我
N
;
}
D
我
v
.
W
o
R
D
s
E
C
T
我
o
N
1.
{
P
A.
G
E
:
W
o
R
D
s
E
C
T
我
o
N
1.
;
}
-
-
>
以下是不带换行符的输出:
<!--/* Font Definitions */@font-face {font-family:Helvetica; panose-1:2 11 6 4 2 2 2 2 2 4;}@font-face {font-family:Helvetica; panose-1:2 11 6 4 2 2 2 2 2 4;}@font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;}@font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4;}@font-face {font-family:Consolas; panose-1:2 11 6 9 2 2 4 3 2 4;}/* Style Definitions */p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0in; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman","serif";}a:link, span.MsoHyperlink {mso-style-priority:99; color:blue; text-decoration:underline;}a:visited, span.MsoHyperlinkFollowed {mso-style-priority:99; color:purple; text-decoration:underline;}p.MsoPlainText, li.MsoPlainText, div.MsoPlainText {mso-style-priority:99; mso-style-link:"Plain Text Char"; margin:0in; margin-bottom:.0001pt; font-size:10.5pt; font-family:Consolas;}p {mso-style-priority:99; margin:0in; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman","serif";}p.MsoAcetate, li.MsoAcetate, div.MsoAcetate {mso-style-priority:99; mso-style-link:"Balloon Text Char"; margin:0in; margin-bottom:.0001pt; font-size:8.0pt; font-family:"Tahoma","sans-serif";}span.PlainTextChar {mso-style-name:"Plain Text Char"; mso-style-priority:99; mso-style-link:"Plain Text"; font-family:Consolas;}span.BalloonTextChar {mso-style-name:"Balloon Text Char"; mso-style-priority:99; mso-style-link:"Balloon Text"; font-family:"Tahoma","sans-serif";}p.msochpdefault, li.msochpdefault, div.msochpdefault {mso-style-name:msochpdefault; margin:0in; margin-bottom:.0001pt; font-size:10.0pt; font-family:"Times New Roman","serif";}span.plaintextchar0 {mso-style-name:plaintextchar; font-family:Consolas;}span.balloontextchar0 {mso-style-name:balloontextchar; font-family:"Tahoma","sans-serif";}span.emailstyle22 {mso-style-name:emailstyle22; font-family:"Calibri","sans-serif"; color:black;}span.emailstyle23 {mso-style-name:emailstyle23; font-family:"Calibri","sans-serif"; color:#1F497D;}span.EmailStyle27 {mso-style-type:personal-reply; font-family:"Calibri","sans-serif"; color:#1F497D;}.MsoChpDefault {mso-style-type:export-only; font-size:10.0pt;}@page WordSection1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1 {page:WordSection1;}-->
在做了一些研究之后,这似乎是由Microsoft Office产品(包括Outlook)创建的一些样式标记。但让我困惑的是,为什么我只能在循环字符串中的每个字符并在它们之间使用换行符输出它们时才能看到这些字符
更让我困惑的是如何检测这些字符并去除它们,以便JSON输出在没有换行符的情况下正确格式化
我试着做些事情
<!--/* Font Definitions */@font-face {font-family:Helvetica; panose-1:2 11 6 4 2 2 2 2 2 4;}@font-face {font-family:Helvetica; panose-1:2 11 6 4 2 2 2 2 2 4;}@font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;}@font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4;}@font-face {font-family:Consolas; panose-1:2 11 6 9 2 2 4 3 2 4;}/* Style Definitions */p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0in; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman","serif";}a:link, span.MsoHyperlink {mso-style-priority:99; color:blue; text-decoration:underline;}a:visited, span.MsoHyperlinkFollowed {mso-style-priority:99; color:purple; text-decoration:underline;}p.MsoPlainText, li.MsoPlainText, div.MsoPlainText {mso-style-priority:99; mso-style-link:"Plain Text Char"; margin:0in; margin-bottom:.0001pt; font-size:10.5pt; font-family:Consolas;}p {mso-style-priority:99; margin:0in; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman","serif";}p.MsoAcetate, li.MsoAcetate, div.MsoAcetate {mso-style-priority:99; mso-style-link:"Balloon Text Char"; margin:0in; margin-bottom:.0001pt; font-size:8.0pt; font-family:"Tahoma","sans-serif";}span.PlainTextChar {mso-style-name:"Plain Text Char"; mso-style-priority:99; mso-style-link:"Plain Text"; font-family:Consolas;}span.BalloonTextChar {mso-style-name:"Balloon Text Char"; mso-style-priority:99; mso-style-link:"Balloon Text"; font-family:"Tahoma","sans-serif";}p.msochpdefault, li.msochpdefault, div.msochpdefault {mso-style-name:msochpdefault; margin:0in; margin-bottom:.0001pt; font-size:10.0pt; font-family:"Times New Roman","serif";}span.plaintextchar0 {mso-style-name:plaintextchar; font-family:Consolas;}span.balloontextchar0 {mso-style-name:balloontextchar; font-family:"Tahoma","sans-serif";}span.emailstyle22 {mso-style-name:emailstyle22; font-family:"Calibri","sans-serif"; color:black;}span.emailstyle23 {mso-style-name:emailstyle23; font-family:"Calibri","sans-serif"; color:#1F497D;}span.EmailStyle27 {mso-style-type:personal-reply; font-family:"Calibri","sans-serif"; color:#1F497D;}.MsoChpDefault {mso-style-type:export-only; font-size:10.0pt;}@page WordSection1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1 {page:WordSection1;}-->