14

根据标题,是否可以在 HTML中创建(非平凡的)quine ?

我对 HTML quine 的定义:

一个非平凡的 HTML quine 是一个不为 null 并使用至少一个 HTML 标记的 HTML quine,假设 HTML 文件中的某些字符串由浏览器呈现为纯文本。HTML quine 被定义q.html 为使得标准浏览器呈现的输出是其自身的内容q.html

(我愿意对此定义发表任何评论,我现在有点破解它)

HTML 不是图灵完备的,因此不能应用不动点定理来证明它确实是可能的。

但是,这并不一定意味着 HTML quine 是不可能的。或者实际上是否可以证明 HTML quine 是不可能的?

4

4 回答 4

20

“纯” HTML 肯定是不可能的。显然它可以使用 JavaScript,但也可以使用 CSS:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>This is the title</title>
<style type="text/css"><![CDATA[ 
* {
  display:inline;
  white-space:pre;
}
html:last-child {
  white-space:normal;
}
html:before  {content:'<html xmlns="http://www.w3.org/1999/xhtml">';}
html:after   {content:'</html>';}
head:before  {content:'<head>';}
head:after   {content:'</head>';}
title:before {content:'<title>';}
title:after  {content:'</title>';}
style:before {content:'<style type="text/css"><![CDATA[';}
style:after  {content:']]\00003e</style>';}
body:before  {content:'<body/>';position:absolute;left:0;}
]]></style>
</head>
<body/>
</html>
于 2012-10-08T20:47:23.457 回答
0

这是不可能的。由于每个未转义的元素都将被浏览器解释为标记,因此浏览器将尝试呈现或处理这些元素的内容或作为控件。您无法显示未以某种方式转义的元素,例如使用<pre>标签。但是这样的标签也不会显示。

当然,您可以将其作为带有适当 HTTP 标头的 text/plain 提供,但那不是 HTML。仅使用 .html 扩展名将使浏览器在大多数(所有?)情况下将其呈现为 html。

于 2011-12-14T20:27:26.780 回答
0

你不能。

<!DOCTYPE html>
<html>
<head>
<title></title>
<head>
<body>
<div id="quine" ></div>
<script>
document.getElementById("quine").innerHTML = document.documentElement.innerHTML.replace(/\&/g, "&amp;" ).replace(/\</g, "&lt;" ).replace(/\>/g, "&gt;");
</script>
</body>
</html>

你可以作弊并做

<body onload="document.getElementById("quine").innerHTML = document.documentElement.innerHTML.replace(/\&/g, "&amp;" ).replace(/\</g, "&lt;" ).replace(/\>/g, "&gt;");" >
<div id="quine" ></div>
</body>
于 2020-11-21T19:55:03.600 回答
-5

当然,就像所有 HTML “假设”一样,答案就是使用 JQuery!

于 2012-04-05T21:02:19.457 回答