Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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回显特定标记(但仍回显其他标记)_Php_Html - Fatal编程技术网

停止PHP回显特定标记(但仍回显其他标记)

停止PHP回显特定标记(但仍回显其他标记),php,html,Php,Html,我一直在想,是否有可能从打印中“黑名单”特定的HTML标记(但仍然允许其他标记回显,所以不必去除_标记) 因此,基本上,如果我想阻止h1标记,而不是: 你好,世界 我的代码会回显: <h1>Hello World</h1> 你好,世界 你们中的任何人都知道这是否可能,如果可能,我应该怎么做才能实现这一点?实现标记不可渲染的一种方法是使用大括号中的字符实体替换标记。例如: $string = "<h1>foobar</h1>"; $unrende

我一直在想,是否有可能从打印中“黑名单”特定的HTML标记(但仍然允许其他标记回显,所以不必去除_标记)

因此,基本上,如果我想阻止
h1
标记,而不是:

你好,世界 我的代码会回显:

<h1>Hello World</h1>
你好,世界

你们中的任何人都知道这是否可能,如果可能,我应该怎么做才能实现这一点?

实现标记不可渲染的一种方法是使用大括号中的字符实体替换标记。例如:

$string = "<h1>foobar</h1>";
$unrender = str_replace(array('<', '>'), array('&lt;', '&gt;') ,$string);
echo $unrender;
其渲染方式如下:

福巴

下一步是使其成为处理给定字符串中所有标记的基本函数:

function unrender($element) {
    $lbracket = '/<(.*?)/';
    $rbracket = '/>/';
    $l = preg_replace($lbracket, '&lt;', $element);
    $r = preg_replace($rbracket, '&gt;', $l);

    return $r;        
}

$string = "<h1>foobar</h1><br />";
echo unrender($string);
呈现如下:

foobar

下一个改进是允许列出黑名单标签。在这一点上,我觉得有义务说,a使这样的表演更容易。以下是提议的过程:

  • 对于数组中的每个标记,如
    $blacktag=array('h1','h2','p')定位要未渲染的标记(除非使用DOM解析器,否则涉及正则表达式)
  • 通过正确更换尖括号,松开列表中的标记
  • 表面上这听起来很容易,但是考虑匹配标签不匹配。开始与结束不同(由于
    /
    )。然后,考虑到你可能有这样的东西,一个看起来像标签的东西,不是H20是水,不是标签


    这成为一个相当复杂的挑战。即使是传递文本和要取消记录的单个标记的“简单”功能也是一个挑战。

    我们总是很乐意帮助和支持新的编码人员,但您需要首先帮助自己。:-)如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读一个好问题。一定要认真阅读。@JayBlanchard我以前问过这样的问题。政策改变了吗?问“可能吗”和“如果可能的话我怎么做”的问题太广泛了。@JayBlanchard抱歉,我不知道……我想我知道怎么做我认为你在问什么,但我不确定你在问什么。您是否要求PHP使某些HTML不可还原?
    function unrender($element) {
        $lbracket = '/<(.*?)/';
        $rbracket = '/>/';
        $l = preg_replace($lbracket, '&lt;', $element);
        $r = preg_replace($rbracket, '&gt;', $l);
    
        return $r;        
    }
    
    $string = "<h1>foobar</h1><br />";
    echo unrender($string);
    
    &lt;h1&gt;foobar&lt;/h1&gt;&lt;br /&gt;