Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP字符串+;返回未知等号的结果?_Php_String_Strpos - Fatal编程技术网

使用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,谢谢你。是时候让我开始阅读了,这样我才能理解刚才发生的事情:-)