PHP 将 div 替换为一些 class 到具有附加属性的 p
PHP replace div with some class to p with addtional attribute
目前我使用 preg_raplace
,我尝试将所有 p
标记替换为 class="para"
到 div
具有附加属性.. 问题;它不会用 class="para"
更改所有 p 标签。
My codes in PHP FIDDLE FOR LIVE TEST.
下面是我的代码。
<?php
// your code goes here
$content = '
<p class="para">My first paragraph</p>
<p class="para">bansbnabsna</p>
<p class="para">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse non augue vitae elit vehicula condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius nunc massa, id dictum urna auctor nec. Cras ut urna at sapien volutpat interdum posuere sed metus. Duis vel egestas turpis. Mauris maximus aliquam pellentesque. Mauris dapibus nisi non ante aliquet pretium. Cras vitae nisi pellentesque, ullamcorper nisi vitae, malesuada ante. Phasellus scelerisque congue diam ac cursus. Nullam arcu leo, condimentum sit amet elementum in, blandit blandit dui. Phasellus dignissim, nibh non aliquet facilisis, augue urna porta odio, eu porta neque purus a purus. Sed sollicitudin ut magna vitae lacinia. Mauris venenatis justo nisi, nec interdum nisl lobortis non. Aenean a dictum nisi, sed mollis massa. Praesent ut aliquet dui.
</p>
<p class="para">Nulla et tristique erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer volutpat nibh bibendum condimentum elementum. Duis tempor porta lobortis. Aenean mollis diam a justo condimentum, in iaculis leo ornare. Quisque ultrices pulvinar tortor a tempor. Ut et finibus ipsum. Vivamus nec interdum magna. Fusce dignissim laoreet libero sit amet lacinia. Mauris varius erat odio, a porta sapien pulvinar ut. Aliquam pretium arcu at nulla lobortis, eu ultrices ipsum porta. Quisque viverra ullamcorper elit ac scelerisque. Phasellus scelerisque laoreet laoreet. Nulla mattis sed ligula nec tempor. Vivamus condimentum nisi sit amet congue molestie. Nunc posuere id tellus et tincidunt.
</p>
<p class="para">Etiam sodales magna dui, et suscipit erat egestas non. Integer a malesuada nunc. Sed pharetra justo nec odio posuere, quis pellentesque massa fringilla. Donec dui metus, porttitor eget lacinia eget, consequat in est. Vestibulum id sapien quis est ultrices rutrum at id purus. Duis ac odio a metus ultricies varius sed a neque. Vestibulum porttitor tortor consequat fermentum viverra. Quisque convallis ex eu risus placerat tempus at vitae leo. Sed vel ante sit amet justo rhoncus convallis. Praesent lobortis lobortis fermentum. Sed sapien velit, bibendum aliquam nibh vitae, porttitor egestas odio.
</p>
<p class="para">Aliquam fermentum arcu nec dapibus dictum. Duis egestas turpis eu finibus ullamcorper. Fusce dictum sed leo hendrerit pretium. Morbi finibus sem tortor, at tristique mauris sodales placerat. Vestibulum auctor, nisi et pellentesque porttitor, lectus leo facilisis turpis, in iaculis ligula arcu eget urna. Vestibulum fermentum luctus lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam rhoncus mollis consectetur. Fusce sagittis eros lacus, eu aliquam nisi ultricies ac. Sed sit amet lacinia ante. Quisque congue, tortor ac pretium volutpat, nisi nisi laoreet elit, id condimentum ex sapien at urna. Cras sollicitudin malesuada commodo. Integer rutrum sapien non lacinia lacinia. Sed aliquet massa vel erat auctor, quis malesuada felis mollis.
</p>
<p class="para">Proin eu ipsum sem. Sed sagittis arcu nec justo pulvinar, a suscipit magna pulvinar. Nullam ullamcorper est nec dui fringilla, ullamcorper ornare massa semper. Nulla sed ipsum lacus. Vivamus ut imperdiet magna. Nullam nec malesuada quam. Duis facilisis quis lorem eget laoreet. Fusce quis leo ultricies, ullamcorper diam eget, iaculis magna. Nulla nec nisi sit amet arcu dignissim suscipit a eget felis. Sed sagittis accumsan cursus. Mauris pharetra nunc ex, in dignissim lectus mattis et. Maecenas sit amet velit ac nisl fringilla rhoncus vitae a quam. Praesent in placerat nisi. Maecenas suscipit, odio non pretium pellentesque, tortor metus commodo nibh, faucibus egestas urna ex sit amet magna. Sed aliquet, mi non faucibus bibendum, erat eros consectetur dolor, vitae iaculis magna sem eget leo. Aliquam quis lorem finibus turpis pellentesque pulvinar.</p>
';
function format_content_as_editor($str){
if($str){
return
//preg_replace('/(\r\n|\n|\r){3,}/', "",
str_replace('<br/>', '',
str_replace('<br>', '',
preg_replace('/<p [^<]*?class="([^<]*?para.*?)">(.*?)<\/p>/','<div class="" contenteditable="true" autocomplete="off"></div>',
$str
)
)
//)
);
} else {
return '<div class="para" contenteditable="true" autocomplete="off">Start writing..</div>';
}
}
print_r(format_content_as_editor($content));
它不起作用的原因是因为您正在测试的某些 HTML 标记内有换行符,并且正则表达式中的 .*
不匹配垂直空格(行休息)。要修复,请将 /s
修饰符添加到您的正则表达式中。参见:http://php.net/manual/en/reference.pcre.pattern.modifiers.php
s (PCRE_DOTALL) If this modifier is set, a dot metacharacter in the
pattern matches all characters, including newlines. Without it,
newlines are excluded. This modifier is equivalent to Perl's /s
modifier. A negative class such as [^a] always matches a newline
character, independent of the setting of this modifier.
这是带有 /s
修饰符和 /i
修饰符的函数的更简洁版本,因此它也不是区分大小写的匹配项,因为 HTML不应考虑标签大小写,在 HTML 标签不区分大小写。因此,两个修饰符一起是 /is
<?php
function format_content_as_editor($str)
{
$str = trim((string) $str);
if (!$str) { // If empty.
return '<div class="para" contenteditable="true" autocomplete="off">Start writing..</div>';
}
// Strip <br>, <BR>, <Br>, <br/>, <br />, etc.
$str = preg_replace('/\<br\s*\/?\>/i', '', $str);
// Replace all <p class="para" ...>[content]</p>.
$str = preg_replace('/\<p\s+class\s*\=\s*(["\'])para\1([^>]*)\>(.*?)\<\/p\>/is', '<div class="para" contenteditable="true" autocomplete="off"></div>', $str);
return $str;
}
所以你可以使用我的代码,或者简单地改变你自己的函数:
function format_content_as_editor($str){
if($str){
return
//preg_replace('/(\r\n|\n|\r){3,}/', "",
str_replace('<br/>', '',
str_replace('<br>', '',
preg_replace('/<p [^<]*?class="([^<]*?para.*?)">(.*?)<\/p>/s','<div class="" contenteditable="true" autocomplete="off"></div>',
$str
)
)
//)
);
} else {
return '<div class="para" contenteditable="true" autocomplete="off">Start writing..</div>';
}
}
为您突出显示带有 /s
标志的正则表达式模式:
'/<p [^<]*?class="([^<]*?para.*?)">(.*?)<\/p>/s'
目前我使用 preg_raplace
,我尝试将所有 p
标记替换为 class="para"
到 div
具有附加属性.. 问题;它不会用 class="para"
更改所有 p 标签。
My codes in PHP FIDDLE FOR LIVE TEST.
下面是我的代码。
<?php
// your code goes here
$content = '
<p class="para">My first paragraph</p>
<p class="para">bansbnabsna</p>
<p class="para">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse non augue vitae elit vehicula condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius nunc massa, id dictum urna auctor nec. Cras ut urna at sapien volutpat interdum posuere sed metus. Duis vel egestas turpis. Mauris maximus aliquam pellentesque. Mauris dapibus nisi non ante aliquet pretium. Cras vitae nisi pellentesque, ullamcorper nisi vitae, malesuada ante. Phasellus scelerisque congue diam ac cursus. Nullam arcu leo, condimentum sit amet elementum in, blandit blandit dui. Phasellus dignissim, nibh non aliquet facilisis, augue urna porta odio, eu porta neque purus a purus. Sed sollicitudin ut magna vitae lacinia. Mauris venenatis justo nisi, nec interdum nisl lobortis non. Aenean a dictum nisi, sed mollis massa. Praesent ut aliquet dui.
</p>
<p class="para">Nulla et tristique erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer volutpat nibh bibendum condimentum elementum. Duis tempor porta lobortis. Aenean mollis diam a justo condimentum, in iaculis leo ornare. Quisque ultrices pulvinar tortor a tempor. Ut et finibus ipsum. Vivamus nec interdum magna. Fusce dignissim laoreet libero sit amet lacinia. Mauris varius erat odio, a porta sapien pulvinar ut. Aliquam pretium arcu at nulla lobortis, eu ultrices ipsum porta. Quisque viverra ullamcorper elit ac scelerisque. Phasellus scelerisque laoreet laoreet. Nulla mattis sed ligula nec tempor. Vivamus condimentum nisi sit amet congue molestie. Nunc posuere id tellus et tincidunt.
</p>
<p class="para">Etiam sodales magna dui, et suscipit erat egestas non. Integer a malesuada nunc. Sed pharetra justo nec odio posuere, quis pellentesque massa fringilla. Donec dui metus, porttitor eget lacinia eget, consequat in est. Vestibulum id sapien quis est ultrices rutrum at id purus. Duis ac odio a metus ultricies varius sed a neque. Vestibulum porttitor tortor consequat fermentum viverra. Quisque convallis ex eu risus placerat tempus at vitae leo. Sed vel ante sit amet justo rhoncus convallis. Praesent lobortis lobortis fermentum. Sed sapien velit, bibendum aliquam nibh vitae, porttitor egestas odio.
</p>
<p class="para">Aliquam fermentum arcu nec dapibus dictum. Duis egestas turpis eu finibus ullamcorper. Fusce dictum sed leo hendrerit pretium. Morbi finibus sem tortor, at tristique mauris sodales placerat. Vestibulum auctor, nisi et pellentesque porttitor, lectus leo facilisis turpis, in iaculis ligula arcu eget urna. Vestibulum fermentum luctus lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam rhoncus mollis consectetur. Fusce sagittis eros lacus, eu aliquam nisi ultricies ac. Sed sit amet lacinia ante. Quisque congue, tortor ac pretium volutpat, nisi nisi laoreet elit, id condimentum ex sapien at urna. Cras sollicitudin malesuada commodo. Integer rutrum sapien non lacinia lacinia. Sed aliquet massa vel erat auctor, quis malesuada felis mollis.
</p>
<p class="para">Proin eu ipsum sem. Sed sagittis arcu nec justo pulvinar, a suscipit magna pulvinar. Nullam ullamcorper est nec dui fringilla, ullamcorper ornare massa semper. Nulla sed ipsum lacus. Vivamus ut imperdiet magna. Nullam nec malesuada quam. Duis facilisis quis lorem eget laoreet. Fusce quis leo ultricies, ullamcorper diam eget, iaculis magna. Nulla nec nisi sit amet arcu dignissim suscipit a eget felis. Sed sagittis accumsan cursus. Mauris pharetra nunc ex, in dignissim lectus mattis et. Maecenas sit amet velit ac nisl fringilla rhoncus vitae a quam. Praesent in placerat nisi. Maecenas suscipit, odio non pretium pellentesque, tortor metus commodo nibh, faucibus egestas urna ex sit amet magna. Sed aliquet, mi non faucibus bibendum, erat eros consectetur dolor, vitae iaculis magna sem eget leo. Aliquam quis lorem finibus turpis pellentesque pulvinar.</p>
';
function format_content_as_editor($str){
if($str){
return
//preg_replace('/(\r\n|\n|\r){3,}/', "",
str_replace('<br/>', '',
str_replace('<br>', '',
preg_replace('/<p [^<]*?class="([^<]*?para.*?)">(.*?)<\/p>/','<div class="" contenteditable="true" autocomplete="off"></div>',
$str
)
)
//)
);
} else {
return '<div class="para" contenteditable="true" autocomplete="off">Start writing..</div>';
}
}
print_r(format_content_as_editor($content));
它不起作用的原因是因为您正在测试的某些 HTML 标记内有换行符,并且正则表达式中的 .*
不匹配垂直空格(行休息)。要修复,请将 /s
修饰符添加到您的正则表达式中。参见:http://php.net/manual/en/reference.pcre.pattern.modifiers.php
s (PCRE_DOTALL) If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl's /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier.
这是带有 /s
修饰符和 /i
修饰符的函数的更简洁版本,因此它也不是区分大小写的匹配项,因为 HTML不应考虑标签大小写,在 HTML 标签不区分大小写。因此,两个修饰符一起是 /is
<?php
function format_content_as_editor($str)
{
$str = trim((string) $str);
if (!$str) { // If empty.
return '<div class="para" contenteditable="true" autocomplete="off">Start writing..</div>';
}
// Strip <br>, <BR>, <Br>, <br/>, <br />, etc.
$str = preg_replace('/\<br\s*\/?\>/i', '', $str);
// Replace all <p class="para" ...>[content]</p>.
$str = preg_replace('/\<p\s+class\s*\=\s*(["\'])para\1([^>]*)\>(.*?)\<\/p\>/is', '<div class="para" contenteditable="true" autocomplete="off"></div>', $str);
return $str;
}
所以你可以使用我的代码,或者简单地改变你自己的函数:
function format_content_as_editor($str){
if($str){
return
//preg_replace('/(\r\n|\n|\r){3,}/', "",
str_replace('<br/>', '',
str_replace('<br>', '',
preg_replace('/<p [^<]*?class="([^<]*?para.*?)">(.*?)<\/p>/s','<div class="" contenteditable="true" autocomplete="off"></div>',
$str
)
)
//)
);
} else {
return '<div class="para" contenteditable="true" autocomplete="off">Start writing..</div>';
}
}
为您突出显示带有 /s
标志的正则表达式模式:
'/<p [^<]*?class="([^<]*?para.*?)">(.*?)<\/p>/s'