php preg_match_all 在 £ 符号和 UTF-8 方面遇到问题


php preg_match_all having issues with £ sign and UTF-8

我对这个问题有类似的问题。我从另一个服务收到包含"开始--- £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);