我对这个问题有类似的问题。我从另一个服务收到包含"开始--- £144.23 --- £151.23 --- 请在 2013 年 6 月 25 日之前支付 £161.23 ---END"的文本,我想解析。
这是我的脚本(包含上述序列的文本由 $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和服务器上都是PHP5.3。
在指令中:
preg_match_all("($beg_tag(.*)$close_tag)siU", $string, $matching_data);
更改分隔符
preg_match_all("/$beg_tag(.*)$close_tag/siU", $string, $matching_data);