使用preg_replace替换空段,无法识别空格

时间:2011-03-17 22:29:22

标签: php regex encoding

我需要改变这个:

<p> </p>

进入这个:

<p class="notmobile"> </p>

在一个字符串上。看似简单,但以下不起作用:

$filecontent  = preg_replace('/<p> <\/p>/', '<p class="notmobile"> </p>',   $filecontent);
$filecontent  = preg_replace('/^<p> <\/p>/', '<p class="notmobile"> </p>',  $filecontent);
$filecontent  = preg_replace('/<p>\s<\/p>/', '<p class="notmobile"> </p>',  $filecontent);
$filecontent  = preg_replace('/<p>\s+<\/p>/', '<p class="notmobile"> </p>', $filecontent);
$filecontent  = str_replace('<p> </p>', '<p class="notmobile"> </p>',   $filecontent);

为了确保我不会发疯,我在xxx上做了替换,把它变成yyy,效果很好。我认为问题是我的空间不是一个正常的空间,因为内容可能是windows字符集iso-8859-1或者它是什么(或者因为我们已经将它转换为utf-8沿线某处......)

从chome / firefox复制并粘贴空段也不起作用。

我有点卡住了:(感谢您的帮助!

更新:这是base64_output,AwMD是一个0字符串,我用它来标记上面一串p的开头。

AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + YmFzZTY0ZW5jb2Rpbmc8L3A + PC9w

* update2:我发现php中的charater ord值是:194后跟160 - 例如它是两个字符。奇怪的。 *

4 个答案:

答案 0 :(得分:8)

确实是NBSP 11000010 10100000的UTF-8编码\xA0。如前所述,这有效:

= preg_replace('/<p>\p{Z}*<\/p>/u', '<p class="notmobile"> </p>', $f);

答案 1 :(得分:1)

为什么不将<p>替换为<p class="notmobile">

$filecontent = str_replace("<p>", "<p class=\"notmobile\">", $filecontent);

或者您是否尝试使用<p>替换所有<p class="notmobile"> </p>标记,无论内容如何?


对于中间只有一个空格的标记对,请尝试将其替换为:

$filecontent = str_replace("<p> </p>", "<p class=\"notmobile\"> </p>", $filecontent);

答案 2 :(得分:1)

它可能是一个不间断的空格&nbsp; ASCII码0xA0, 160

尝试:

$filecontent  = preg_replace('/<p>\xA0<\/p>/', '<p class="notmobile"> </p>',   $filecontent);

答案 3 :(得分:0)

$filecontent  = preg_replace('/<p>\xC2\xA0<\/p>/', '<p class="notmobile"> </p>',    $filecontent);

当你意识到什么都没有时,很容易!现在修改有用的答案。