阻止创建应使用PHP创建的HTML元素---使用PHP本身

我与CMS MediaWiki一起使用,它包含许多功能,我希望阻止某些功能在所有包含这些功能的网页中进行解析。
我可以使用CSS或JavaScript阻止某些此类功能(例如较小的内置菜单链接),但是我不能阻止其他一些功能,这就是我的问题:

由于用户可以取消CSS和/或JS,因此该用户最终可能会使用“已阻止”功能。
解决我的问题的一个很好的实际例子是我希望避免对太多基于MediaWiki的社区中的I found causing more harm than good的编辑摘要框进行解析。

由于我不是PHP程序员,并且我不想从头开始研究和编辑MediaWiki CMS的大量源代码(并为自动升级等设置例外),所以我更喜欢间接的(“调整”)解决方案:

MediaWiki具有LocalSettings.php文件,可以在其中运行自定义PHP。
我希望运行一些PHP函数,根据某些标准(可能是CSS类),这些函数将阻止对先前解析的元素(例如,编辑摘要框)进行解析。
如果使用当前版本的PHP甚至可以做到这一点,那么如何做到?

chixx 回答:阻止创建应使用PHP创建的HTML元素---使用PHP本身

否,无法从其他文件中更改HTML代码,除非您具有某种中间件,该中间件会将代码以纯文本形式检索,编辑(例如,使用Regex)并将其传递给实际视图,这听起来像是MVC模式。如果那是MediaWiki的工作方式(我非常怀疑),那么这就是您的方式。

为什么不起作用?这是因为PHP是一种后端语言。它无法与前端交互,因为PHP脚本/文件(包含HTML)将在服务器(=后端)上执行,然后传递到浏览器。

像这样想象(非常非常简化):
your_file.php
这是执行脚本之前服务器上文件的状态:

<div>
  <?php
    echo "<a>test</a>;
  ?>
</div>

然后在服务器上执行脚本,结果是:

<div>
  <a>test</a>
</div>

您的文件甚至还没有发送到浏览器,但是现在可以了。不幸的是,您的文件已经执行,您将无法执行任何PHP函数。不,您不能在服务器上使用CSS和JS。


由于您可能无法实现顶部所述的模式,因此有最后的希望。我不熟悉MediaWiki,但我想我听说他们在实际的PHP文件中生成页面。如果是这种情况,请执行以下操作:

<div>
  Yey,some nice features I want to keep!
</div>
<?php
/*
<div>
  Oh no! A feature I should hide!
</div>
?>
<div>
  Yey,some nice features I want to keep!
</div>

只需将其注释掉;)。如果那还是行不通的,那么...那么,那就是您想要的方法没有解决办法,更不用说简单了。

,

您不能通过PHP来做到这一点,但是如果您具有服务器访问权限,则仅出于艺术目的,可以尝试一些高风险方法。

  

免责声明:这些不是实用的解决方案,除非您知道自己在做什么并且没有其他可能的方法,否则请不要使用它们。

因此,假设您只能编辑服务器配置和LocalSetings.php,则可以:

  1. 使用重写规则将所有请求定向到您的LocalSettings.php文件,从而有效地更改CMS的入口点。然后,您可以使用ob_get_clean()捕获输出并根据需要对其进行修改。
  2. 使用nginx,使用sub_filter过滤HTML,然后将其发送到浏览器。

由于您不想弄乱CMS源代码,因此我假设您想更少地更改服务器配置。但是我仍然保留我的回答,以防将来对其他人有所帮助。

本文链接:https://www.f2er.com/3048478.html

大家都在问