使用PHP字符串+;返回未知等号的结果?
我有一个名为使用PHP字符串+;返回未知等号的结果?,php,string,strpos,Php,String,Strpos,我有一个名为$message的字符串变量,如下所示: * Time Stamp: 2012-12-03 16:36:04 * Speed: 7 km/h * Heading: 356 deg (N) * Event ID: -48 * Event Desc: .Arrived at Inbound Receiving * Event Value: -56 * Event Va
$message
的字符串变量,如下所示:
* Time Stamp: 2012-12-03 16:36:04
* Speed: 7 km/h
* Heading: 356 deg (N)
* Event ID: -48
* Event Desc: .Arrived at Inbound Receiving
* Event Value: -56
* Event Value Type: 0
然后,我尝试使用以下代码从变量中提取事件和时间戳值:
$event = null;
$lines = explode(PHP_EOL, $message);
foreach($lines as $line) {
// skip empty lines
if(strlen($line) == 0) {
continue;
}
$tokens = explode(':', $line);
// tokens[0] contains the key , e.g. Event Value
// tokens[1]~[N] contains the value (where N is the number of pieces), e.g. -56
// stitch token 1 ~ N
$key = $tokens[0];
unset($tokens[0]);
$val = implode(': ', $tokens);
// do your extra logic here, e.g. set $event variable to value
if(strpos($key, 'Event Desc') > -1) {
$event = $val;
}
if(strpos($key, 'Time Stamp') > -1) {
$time = $val;
}
}
这非常有效,唯一的问题是返回的值是:
.Arrived at Arrived at Inbound Receiving =
2012-12-03 16:36:04 =
等号是从哪里来的?如何将其与尾随空格一起删除
我的预期结果是:
.Arrived at Arrived at Inbound Receiving
及
这是它在字符串变量中的显示方式。
一如既往地感谢您。如果您使用
echo $time;
echo $event;
它将显示2012-12-03 16:36:04。如果您使用
echo $time;
echo $event;
它将显示2012-12-03 16:36:04。仅到达入站接收这将为您提供正确的键和值
list($key, $value) = explode(':', $line, 2);
$key = trim($key);
$value = trim(quoted_printable_decode($value));
这将为您提供正确的键和值
list($key, $value) = explode(':', $line, 2);
$key = trim($key);
$value = trim(quoted_printable_decode($value));
我猜您正在从电子邮件中获得
$message
内容。如果是这种情况,那么首先尝试运行内容。我猜您是从电子邮件中获得$message
内容。如果是这种情况,那么首先尝试运行内容。您可以尝试
preg_match_all("/ ([a-z ]+):([a-z0-9:\-. ]+)/i", $string,$match);
$values = array_combine($match[1], $match[2]) ;
echo $values['Time Stamp'] ,PHP_EOL ;
echo $values['Speed'] ,PHP_EOL ;
echo $values['Heading'] ,PHP_EOL ;
echo $values['Event Desc'] ,PHP_EOL ;
// .... etc
输出
2012-12-03 16:36:04
7 km
356 deg
.Arrived at Inbound Receiving
你可以试试
preg_match_all("/ ([a-z ]+):([a-z0-9:\-. ]+)/i", $string,$match);
$values = array_combine($match[1], $match[2]) ;
echo $values['Time Stamp'] ,PHP_EOL ;
echo $values['Speed'] ,PHP_EOL ;
echo $values['Heading'] ,PHP_EOL ;
echo $values['Event Desc'] ,PHP_EOL ;
// .... etc
输出
2012-12-03 16:36:04
7 km
356 deg
.Arrived at Inbound Receiving
能否将预期结果也添加到常规表达式中。这就是它们的用途。这是一封来自电子邮件的
$message
吗?嗨,谢谢你抽出时间。爸爸,我已经把我的预期结果添加到问题中了@sberry,100%正确,来自cpanel上的电子邮件管道,处理结果通过电子邮件发送给我。谢谢。有关解决此问题的可能方法,请参阅我的答案。能否将预期结果也添加到常规表达式中。这就是它们的用途。这是一封来自电子邮件的$message
吗?嗨,谢谢你抽出时间。爸爸,我已经把我的预期结果添加到问题中了@sberry,100%正确,来自cpanel上的电子邮件管道,处理结果通过电子邮件发送给我。谢谢。请参阅我的答案,了解解决此问题的可能方法。谢谢。谢谢你的时间。有点难以承受,我需要做我的阅读。我说的对吗:$messagetwo=returnpreg\u replace('/[^\r\n]{73}[^=\r\n]{2}/'、“$0=\r\n”、str\u replace(“%”、“=”、str\u replace(“%20”、“、rawurlencode($message))代码>谢谢你。谢谢你的时间。有点难以承受,我需要做我的阅读。我说的对吗:$messagetwo=returnpreg\u replace('/[^\r\n]{73}[^=\r\n]{2}/'、“$0=\r\n”、str\u replace(“%”、“=”、str\u replace(“%20”、“、rawurlencode($message))代码>这太棒了,谢谢爸爸。最后一个问题是,如何将值设置为变量,如$one=$values['Time Stamp'],PHP\u EOL代码>显然这不起作用。再次感谢。为什么echo$values['Event Desc'],PHP_EOL代码>不工作,但其余的工作?再次感谢@BabaGenius,谢谢你。是时候让我开始阅读了,这样我才能理解刚才发生的事情:-)这太棒了,谢谢爸爸。最后一个问题是,如何将值设置为变量,如$one=$values['Time Stamp'],PHP\u EOL代码>显然这不起作用。再次感谢。为什么echo$values['Event Desc'],PHP_EOL代码>不工作,但其余的工作?再次感谢@BabaGenius,谢谢你。是时候让我开始阅读了,这样我才能理解刚才发生的事情:-)