0

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

4

1 回答 1

0

在指令中:

preg_match_all("($beg_tag(.*)$close_tag)siU", $string, $matching_data);

更改分隔符

preg_match_all("/$beg_tag(.*)$close_tag/siU", $string, $matching_data);
于 2013-08-19T16:51:25.443 回答