是否可以创建HTML quine?

时间:2011-12-06 13:23:42

标签: html computer-science computation-theory quine

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

我对HTML quine的定义:

  

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

(我对这个定义的任何评论持开放态度,我现在就把它搞砸了)

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

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

4 个答案:

答案 0 :(得分:16)

使用“普通”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>

答案 1 :(得分:0)

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

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

答案 2 :(得分: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>

答案 3 :(得分:-5)

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