strip_tags()....用空格替换标签而不是删除它们

Jak*_*ler 37 php

你知道怎么用PHP用空格字符替换html标签吗?

如果我显示

strip_tags('<h1>Foo</h1>bar');
Run Code Online (Sandbox Code Playgroud)

我得到结果"foobar"但我需要保持单词是"foo bar".

use*_*521 48

$string      = '<h1>Foo</h1>bar';
$spaceString = str_replace( '<', ' <',$string );
$doubleSpace = strip_tags( $spaceString );
$singleSpace = str_replace( '  ', ' ', $doubleSpace );
Run Code Online (Sandbox Code Playgroud)

  • 可以用`$ doubleSpace = preg_replace('/\s\s + /','',$ spaceString)替换`$ doubleSpace = strip_tags($ spaceString);```这样它就可以将任何空间重复的组合替换为单个空间. (5认同)
  • 这实际上是一个很好的解决方案!我不知道你为什么每次都定义一个新变量,但仍然是一个好变量.说明:在每个标记之前添加空格.你删除它们.您删除您创建的重复空格. (3认同)
  • 请为您的代码添加说明.在当前的语法格式化中,很难说出代码的作用. (2认同)
  • 在每一行定义一个新变量的原因*可能*是为了自我记录代码(查看名称并考虑每行在做什么......)我能想到的唯一其他解释是一些IDE抱怨关于重新分配变量(这里是看*你*,疯狂的Netbeans)...... (2认同)
  • 我会这样做,但它并不能很好地解释发生了什么: `str_replace( ' ', ' ', strip_tags( str_replace( '&lt;', ' &lt;','&lt;h1&gt;Foo&lt;/h1&gt;酒吧'))`) (2认同)

Rez*_*ned 37

试试这个.

preg_replace('#<[^>]+>#', ' ', '<h1>Foo</h1>bar');
Run Code Online (Sandbox Code Playgroud)

  • 如果你有类似这样的东西,那就不行了.<button onclick ="document.getElementById('alert').innerHTML ='<strong> MESSAGE </ strong>';" />`.你还有别的想法吗? (5认同)

Cia*_*tic 16

在大多数情况下,Preg替换很好,有一个角落的情况,如这里所讨论的.这应该适用于:

strip_tags(str_replace('<', ' <', $str));

在任何标记之前添加空格在HTML中有效.它也有一些警告,比如你的文字由于某种原因而"<"并且不想在它之前添加空格.


tom*_*lin 6

我用来自 user40521 的例子帮助了我自己,但我用与 php 的 strip_tags 相同的 api 制作了一个函数,它不使用多个变量,并且还进行了修剪,因此从开始/结束中删除了一个空格。

/**
 * @param string $string
 * @param string|null $allowable_tags
 * @return string
 */
function strip_tags_with_whitespace($string, $allowable_tags = null)
{
    $string = str_replace('<', ' <', $string);
    $string = strip_tags($string, $allowable_tags);
    $string = str_replace('  ', ' ', $string);
    $string = trim($string);

    return $string;
}
Run Code Online (Sandbox Code Playgroud)


mgr*_*aph 5

试试这个:

$str = '<h1>Foo</h1>bar';
echo trim(preg_replace('/<[^>]*>/', ' ', $str));
Run Code Online (Sandbox Code Playgroud)


小智 5

preg_replace('#\<(.+?)\>#', ' ', $text);
Run Code Online (Sandbox Code Playgroud)

回答晚了,但试试这个,基本上选择 <> 内的所有内容,包括标签。