提问人:erixoltan 提问时间:3/31/2023 更新时间:4/1/2023 访问量:28
HTML 和 Javascript 的高级递归引号嵌入
Advanced Recursive Quote Embedding for HTML and Javascript
问:
我有一个程序,可以让我展示相同的代码在多种编程语言中的样子。我正在将它编译为 HTML 中的网页,该网页使用按钮 onclick 处理程序将代码切换到用户想要查看的任何语言。由于复杂的嵌入问题,它失败了。我想我正确地转义了嵌入的字符,但似乎它们正在被解释,并且导致了引号嵌入问题。
下面是一个无法正常工作的按钮示例。
<button onclick="code_box('Example_1','<?php\n# Main Program Body\n echo 'Hello, World!', "\n";\n\n?>\n')">PHP</button>
我的所有其他按钮都在工作,并且在大多数情况下,该过程都很顺利。所以我知道这不是由 code_box 函数或周围的 html 代码中的错误引起的。我认为(这只是一个猜测)转义字符正在被Firefox解释,并且因为它们包含对HTML有意义的字符,因此导致了引号嵌入问题。如果是这样的话,那么我就不知道如何解决这个问题了。
作为参考,这里是上面按钮嵌入的PHP代码。
<?php
# Main Program Body
echo 'Hello, World!', "\n";
?>
为了提供更大的上下文,这里是其他按钮工作的完整示例,但此按钮不起作用。其他一切都有效,在我弄清楚这一点之前,我无法继续添加语言。
当我单击PHP按钮时,没有任何反应。当我单击任何其他按钮时,它们会按预期工作。我尝试从按钮代码中删除所有转义的 HTML 实体,它有效,但当然代码缺少所有这些字符。
这是在一长串调试的最后,我让它变得越来越健壮,直到它看起来万无一失,但它仍然不起作用。
提前感谢您的任何帮助!
function code_box(Name, Text)
{
var Element = document.getElementById(Name);
Element.innerHTML = Text;
}
</script></head><body>
<div>
<button onclick="code_box('Example_1','module Hello\n{\n main\n {\n write "Hello, World!" line;\n }\n}')">goalspell</button>
<button onclick="code_box('Example_1','if __name__ == "__main__":\n print("Hello, World!")\n\n')">Python</button>
<button onclick="code_box('Example_1','/* Main Program Body */\nlet [_node, _code, ] = process.argv;\nconsole.log("Hello, World!");')">Javascript</button>
<button onclick="code_box('Example_1','<?php\n# Main Program Body\n echo 'Hello, World!', "\n";\n\n?>\n')">PHP</button>
<button onclick="code_box('Example_1','Hello\nHello ; Hello module.\nMAIN() ; main program\n W "Hello, World!",!\n Q\n\n\n')">MUMPS</button>
<div class="codebox" id="Example_1">module Hello
{
main
{
write "Hello, World!" line;
}
}</div></div>```
答:
不要试图用手写出所有的转义。使用旨在为您正在使用的语言转义数据的函数来执行此操作。
<?php
$string = "The string
you want to show
which can have just about
any literal characters in it
although you need to take care
of \$ and \" as they are
special in PHP!";
# You can generate JS source code using json_encode since JSON is
# more-or-less a subset of JS.
$javascript_literal = json_encode($string);
# Then write your JavaScript expression and convert it to HTML
$javascript_expression = "code_box('Example_1', $javascript_literal);"
$html_attribute_value = htmlspecialchars($javascript_expression);
?>
<button onclick="<?php echo $html_attribute_value ?>">Value</button>
评论
'
'
有时你太担心一些超级先进的东西,你看不到一些明显的东西!
在这种情况下,我正在使用代码生成器,在那里我不遗余力地确保我正确地嵌入了 HTML 和 Javascript 字符。即使我确定嵌入的字符是正确的,我也看到代码不起作用。我尝试了至少十种不同的(可能是正确的)方法来解决这个问题。
没有任何帮助。
我很想责怪浏览器。然后,当我第一百次回到调试器中挠头时,我注意到我做错了什么。
function code_box(Name, Text)
{
var Element = document.getElementById(Name);
Element.innerHTML = Text;
}
这段代码在我的原始帖子中很简单,它设置的是 innerHTML 而不是 innerText。这意味着代码需要额外转义一段时间才能正常工作。我没有这样做,而是进行了以下更改。
更正后的代码如下。
function code_box(Name, Text)
{
var Element = document.getElementById(Name);
Element.innerText = Text;
}
解决了整个问题。
真是如释重负!!
评论
.addEventListener()
<button onclick="code_box(`Example_1`,'<?php\n# Main Program Body\n echo 'Hello, World!', "\n";\n\n?>\n')">PHP</button>