【发布时间】:2011-03-17 22:29:22
【问题描述】:
我需要改变这个:
<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 P>
*update2:我发现 php 中的 charater ord 值是:194 后跟 160 - 例如,它是两个字符。奇怪的。 *
【问题讨论】:
-
您能否发布以某种明确格式(例如 hex 或 base64)编码的字符串,以便我们可以准确地看到它由哪些字符组成?
-
我该怎么做?该段落由tinymce插入到我们的cms中,cms将内容保存到mysql数据库中,然后cms显示数据库中的页面。
-
你的第四个 preg_replace 就是你想要的。更重要的是:它运行良好。您可以将
+更改为*并添加/ims标志。否则,您的源文本中还有其他内容。 (例如<p>标签中的现有属性?) -
为了检验您的理论,您可以使用
ord()打印空段落的每个字符。或者您的编辑器可能支持打印字符的十六进制值,例如在Vim中,将鼠标悬停在字母上并输入ga。 -
如果是其他空白字符,则使用
/\p{Z}+/u将其杀死。