我的代码有问题,例如:
<p>Some text here</p>
<p>More text here</p>
<p> </p>
<p> </p>
<p>Some text</p>
我想删除所有<p> </p>
。
它显示为<p> </p>
,内部带有空格,但是当我复制HTML时,它显示为
。
我尝试了str_replace('<p> </p> ', '', $data);
无效。
我也尝试过preg_replace('#<p>.*?</\1>#s', '', $data);
并删除了所有<p>
(应该这样做),但是我无法实现只删除带有空格(或{{ 1}}?)里面。
用<p>
替换
也不起作用。
我确切的PHP代码是:
.*?
我在“查看页面来源”中得到的信息:
/\s+
编辑:两个$recuperer_trajet_infotrafic_1 = explode('<article class="trajet">', $donnees_infotrafic);
$recuperer_trajet_infotrafic_2 = explode('</article>' , $recuperer_trajet_infotrafic_1[1] );
$recuperer_trajet_infotrafic_3 = preg_replace('#<p>[0-9 /]+/[0-9 /]+</p>#', '', $recuperer_trajet_infotrafic_2[0]);
$trajet_infotrafic = str_replace("/\s?<p>(\s| )*<\/p>/","",$recuperer_trajet_infotrafic_3);
echo '<!-- without str_replace1 -->';
echo $recuperer_trajet_infotrafic_3;
echo '<!-- without str_replace2 -->';
echo '<!-- with str_replace1 -->';
echo $trajet_infotrafic;
echo '<!-- with str_replace2 -->';
标记之间的字符似乎既不是空格也不是<!-- without str_replace1 -->
<!-- TRAJET -->
<h3>Votre trajet</h2>
<div class="septraf"> </div>
<p><span style="text-decoration: underline;">Dans les 2 sens</span> :<br />- arrêt Mimosas reporté à l'arrêt provisoire placé route de Vannes au niveau de la station essence<br />- arrêt Cravate reporté à l'arrêt Ferrière</p>
<p> </p>
<!-- without str_replace2 -->
<!-- with str_replace1 -->
<!-- TRAJET -->
<h3>Votre trajet</h2>
<div class="septraf"> </div>
<p><span style="text-decoration: underline;">Dans les 2 sens</span> :<br />- arrêt Mimosas reporté à l'arrêt provisoire placé route de Vannes au niveau de la station essence<br />- arrêt Cravate reporté à l'arrêt Ferrière</p>
<p> </p>
<!-- with str_replace2 -->
,因为我不能仅使用<p>
或{{1}来替换它}
答案 0 :(得分:0)
我不确定是否理解您正确。但是,您可以这样做:
$data = [
"<p>Some text here</p>",
"<p>More text here</p>",
"<p> </p>",
"<p> </p>",
"<p>Some text</p>"
];
foreach($data as $key => $para) {
if($para == "<p> </p>") {
$data[$key] = ""; // new value here or just unset($data[$key]);
}
}
答案 1 :(得分:0)
好尝试一下,让我知道
$new_str = str_replace("<p> </p>", '', $str);
答案 2 :(得分:0)
您需要使用显示的实际文本,而不是在html浏览器上显示的文本,并且实际文本为&nbsp;。而不是空间。试试这个php代码,
$str = "<p>Some text here</p>\n<p>More text here</p>\n<p> </p>\n<p> </p>\n<p>Some text</p>";
echo "Before:\n";
echo $str;
$str = str_replace('<p> </p>', '', $str);
echo "\n\nAfter:\n";
echo $str;
答案 3 :(得分:0)
对于正则表达式替代方案,它将在您可以使用的数据中查找空格或不间断的html实体的不同组合。
preg_replace('/\s?<p>(\s| )*<\/p>/', '', $data);
扩展匹配含义
\s?
可选地以单个空格字符开头。跟着 通过<p>(\s| )*</p>
包含零的段落元素 或更多空白字符或不间断的html实体。
结果
<!-- TRAJET -->
<h3>Votre trajet</h2>
<div class="septraf"> </div>
<p><span style="text-decoration: underline;">Dans les 2 sens</span> :<br />- arrêt Mimosas reporté à l'arrêt provisoire placé route de Vannes au niveau de la station essence<br />- arrêt Cravate reporté à l'arrêt Ferrière</p>
这将删除以下组合:
<p></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
\s<p></p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
请紧记
\s
不是字面空间,而是适用于所有 空格字符\n
,\r
,\t
也是如此。如果您只想匹配水平空间,请将
\s
替换为\h
。如果您只想匹配文字空间,请将
\s
替换为\040
或[ ]
我相信str_replace
的最初问题是由于末尾的空格错误,该错误可能在数据中不存在。
str_replace('<p> </p> ', '', $data);
str_replace('<p> </p>', '', $data);
我认为该问题与不符合\xc2\xa0
的字面不间断空格alt+0160
,
或\s
有关。
preg_replace('/\s?<p>(\s|\xc2\xa0| )*<\/p>/', '', $data);
答案 4 :(得分:0)
如果您无法真正确定<p>...</p>
中包含什么字符,则可以使用正则表达式删除包含两个或更少字符的所有<p>
元素。
例如,您可以使用preg_replace('/<p>.{0,2}<\/p>/', '' , $data);
。