根据标题,是否可以在HTML中创建(非平凡)quine?
我对HTML quine的定义:
非平凡的HTML quine是非空的并且使用至少一个HTML标记的HTML quine,假设HTML文件中的某些字符串由浏览器呈现为纯文本。定义了一个HTML quine,以便标准浏览器呈现的
q.html
的输出是q.html
本身的内容。
(我对这个定义的任何评论持开放态度,我现在就把它搞砸了)
HTML不是图灵完备的,因此定点定理不能用来证明它确实可行。
然而,这并不一定意味着HTML quine是不可能的。或者它实际上可以证明HTML quine是不可能的吗?
答案 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, "&" ).replace(/\</g, "<" ).replace(/\>/g, ">");
</script>
</body>
</html>
您可以欺骗并这样做
<body onload="document.getElementById("quine").innerHTML = document.documentElement.innerHTML.replace(/\&/g, "&" ).replace(/\</g, "<" ).replace(/\>/g, ">");" >
<div id="quine" ></div>
</body>
答案 3 :(得分:-5)
当然,就像所有HTML“if ifs”一样,答案就是使用JQuery!