Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于清理空的、不必要的HTML标记的Regexp_Php_Regex_Replace_Preg Replace - Fatal编程技术网

Php 用于清理空的、不必要的HTML标记的Regexp

Php 用于清理空的、不必要的HTML标记的Regexp,php,regex,replace,preg-replace,Php,Regex,Replace,Preg Replace,我在一个项目中使用TinyMCE(WYSIWYG)作为默认编辑器,有时它会自动添加,或div 我一直在搜索,但我真的找不到一个好方法来用regex清理任何空标记 我尝试使用的代码是 $pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/"; $str = preg_replace($pattern, '', $str); $pattern=“/]*>([\s]?)*]*>/”; $str=preg_replace($pattern

我在一个项目中使用TinyMCE(WYSIWYG)作为默认编辑器,有时它会自动添加
或div

我一直在搜索,但我真的找不到一个好方法来用regex清理任何空标记

我尝试使用的代码是

$pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/";
$str = preg_replace($pattern, '', $str); 
$pattern=“/]*>([\s]?)*]*>/”;
$str=preg_replace($pattern,,$str);
注意:我还想清除:(

尝试
/(\s|)*/

取而代之的是:

这个regexp有点奇怪,但看起来它可能会工作。您可以尝试以下方法:

$pattern = ':<[^/>]*>\s*</[^>]*>:';
$str = preg_replace($pattern, '', $str);
$pattern=':]*>\s*]*>:';
$str=preg_replace($pattern,,$str);

不过非常相似。

我知道这不是你直接要求的,但经过几个月的反复思考,不仅要解决这一问题,还要解决用户直接从Word发帖所带来的问题,我已经切换到了,而且我再也高兴不过了


编辑:以防不清楚,我想说的是,FCKeditor不会在它喜欢的地方插入任意的段落,加上处理粘贴的单词垃圾。您可能会发现我的帮助。

您需要多个正则表达式,以确保不会用一个泛型正则表达式消除其他需要的元素

正如Ben所说,您可以使用一个通用正则表达式删除有效元素

<\s*[^>]*>\s*`&nbsp;`\s*<\s*[^>]*>
<\s*p\s*>\s*<\s*/p\s*>
<\s*div\s*>\s*<\s*/div\s*>
]*>\s*`\s*]*>
\*
\*
试试这个:

<([\w]+)[^>]*?>(\s|&nbsp;)*<\/\1>
]*?>(\s |)*

删除空白可能不是一个好主意。您可能不希望“Hello world”变成“Helloworld”。然后,您会替换preg_replace()的第二个参数中的空格吗?您可以使用\2(或$2,我忘记了PHP中的语法)在标记之间插入空格。不需要多个正则表达式,只需执行/(\s|)*/即可。添加适当的标记名。