阻止创建应使用 PHP --- 使用 PHP 本身创建的 HTML 元素
Prevent creation of HTML element that should be created with PHP --- with PHP itself
我使用 CMS MediaWiki,它包含许多我想防止的一些功能在本应包含它们的所有网页中被解析。
一些这样的功能(例如次要的内置菜单链接)我可以用 CSS 或 JavaScript 来防止,但有些则不能,这就是我的问题:
由于用户可以取消 CSS and/or JS,该用户最终可能会使用 "prevented" 功能。
我的问题的一个很好的实际例子是我希望阻止解析在太多基于 MediaWiki 的社区中 I found causing more harm than good 的编辑摘要框。
由于我不是 PHP 程序员并且我不想从头开始研究和编辑 MediaWiki CMS 的大量源代码(以及自动升级等例外),我更喜欢间接("tweak")解决方案:
MediaWiki 有 LocalSettings.php
文件,其中可以 运行 自定义 PHP.
我希望 运行 一些 PHP 函数,根据某些标准(CSS class 可能),将阻止解析较早解析的元素,例如编辑摘要框.
如果 PHP 的当前版本甚至可以做到这一点,如果可以的话,如何做到这一点?
不,不可能从不同的文件更改 HTML 代码,除非您有某种中间件可以将代码检索为纯文本,编辑它(例如使用正则表达式)和将其传递给实际视图,这听起来几乎像 MVC 模式。如果这就是 MediaWiki 的工作方式(对此我深表怀疑),那么这就是您的方式。
为什么不起作用?这是因为 PHP 是一种后端语言。它无法与前端交互,因为 PHP script/file(包含您的 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 做到这一点,但如果你有服务器访问权限,你可以尝试一些高风险的方法,只是为了艺术。
Disclaimer: these are not practical solutions, never use them unless you know what you're doing and there's no other possible way.
因此,假设您只能编辑服务器配置和 LocalSetings.php,您可以:
- 使用重写规则将所有请求定向到您的 LocalSettings.php 文件,从而有效地更改 CMS 的入口点。然后,您可以使用 ob_get_clean() 捕获输出并根据需要进行修改。
- 使用 nginx,使用 sub_filter 在到达浏览器之前过滤掉 HTML。
由于您不想弄乱 CMS 源代码,我假设您更不想更改服务器配置。但我仍然会在这里留下我的答案,以防将来对其他人有帮助。
我使用 CMS MediaWiki,它包含许多我想防止的一些功能在本应包含它们的所有网页中被解析。
一些这样的功能(例如次要的内置菜单链接)我可以用 CSS 或 JavaScript 来防止,但有些则不能,这就是我的问题:
由于用户可以取消 CSS and/or JS,该用户最终可能会使用 "prevented" 功能。
我的问题的一个很好的实际例子是我希望阻止解析在太多基于 MediaWiki 的社区中 I found causing more harm than good 的编辑摘要框。
由于我不是 PHP 程序员并且我不想从头开始研究和编辑 MediaWiki CMS 的大量源代码(以及自动升级等例外),我更喜欢间接("tweak")解决方案:
MediaWiki 有 LocalSettings.php
文件,其中可以 运行 自定义 PHP.
我希望 运行 一些 PHP 函数,根据某些标准(CSS class 可能),将阻止解析较早解析的元素,例如编辑摘要框.
如果 PHP 的当前版本甚至可以做到这一点,如果可以的话,如何做到这一点?
不,不可能从不同的文件更改 HTML 代码,除非您有某种中间件可以将代码检索为纯文本,编辑它(例如使用正则表达式)和将其传递给实际视图,这听起来几乎像 MVC 模式。如果这就是 MediaWiki 的工作方式(对此我深表怀疑),那么这就是您的方式。
为什么不起作用?这是因为 PHP 是一种后端语言。它无法与前端交互,因为 PHP script/file(包含您的 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 做到这一点,但如果你有服务器访问权限,你可以尝试一些高风险的方法,只是为了艺术。
Disclaimer: these are not practical solutions, never use them unless you know what you're doing and there's no other possible way.
因此,假设您只能编辑服务器配置和 LocalSetings.php,您可以:
- 使用重写规则将所有请求定向到您的 LocalSettings.php 文件,从而有效地更改 CMS 的入口点。然后,您可以使用 ob_get_clean() 捕获输出并根据需要进行修改。
- 使用 nginx,使用 sub_filter 在到达浏览器之前过滤掉 HTML。
由于您不想弄乱 CMS 源代码,我假设您更不想更改服务器配置。但我仍然会在这里留下我的答案,以防将来对其他人有帮助。