我对这个问题有类似的问题。我从另一项服务收到一条包含“BEGIN--- £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。