我与this question有类似的问题。我从另一项服务中得到一份文本,其中包含'开始---£144.23 ---£151.23 ---请在2013年6月25日之前支付161.23英镑---结束',我想解析。
这是我的脚本(包含上面序列的文本由$text
表示,逐行排列句子):
$myText = utf8_decode(implode(' --- ', $text));
$myExtract = return_between($myText, 'BEGIN', 'END', EXCL);
$allGBP = parse_array(myExtract, '£', ' ');
使用2个功能:
return_between
基本上是strpos和substr的组合,并在'BEGIN'和'END'之间返回提取。
function parse_array($string, $beg_tag, $close_tag)
{
preg_match_all("($beg_tag(.*)$close_tag)siU", $string, $matching_data);
return $matching_data[0];
}
在wamp上脚本工作,$ allGBP是一个包含'£144.23','£151.23'和'£161.23'的数组。在我的服务器上,脚本不起作用,$ allGBP为空。 $allGBP = parse_array(myExtract, '£', ' ');
也不起作用。
看起来UTF-8在某些时候被破坏并且抛出了preg_match_all(基于我发现的另一个问题)但是我很困惑为什么这只会发生在服务器上而不是在wamp上。如果我在开始时移除utf8_decode
,则£符号将变为£。
有什么建议吗?
编辑:以防万一:在wamp和server上都是PHP5.3。
答案 0 :(得分:0)
在指示中:
preg_match_all("($beg_tag(.*)$close_tag)siU", $string, $matching_data);
更改分隔符
preg_match_all("/$beg_tag(.*)$close_tag/siU", $string, $matching_data);