elasticsearch,Javascript,Php,Html,elasticsearch" /> elasticsearch,Javascript,Php,Html,elasticsearch" />

Javascript 如何在php中传递带有特殊字符的字符串,以便在页面上显示它

Javascript 如何在php中传递带有特殊字符的字符串,以便在页面上显示它,javascript,php,html,elasticsearch,Javascript,Php,Html,elasticsearch,我有一个PDF、文档和电子表格的索引(fscrawler)。我编写了一个php脚本来搜索索引并显示文档的内容(以模式打开)。下面是打开带有文档详细信息的模式的代码。但是我无法查看文档 我想保留文档的原始格式(缩进和粗体)。好心的建议 <button type="button" onclick="searchDetails('<?php echo $r['_source']['file']['filename']; ?>', '<?php header

我有一个PDF、文档和电子表格的索引(fscrawler)。我编写了一个php脚本来搜索索引并显示文档的内容(以模式打开)。下面是打开带有文档详细信息的模式的代码。但是我无法查看文档

我想保留文档的原始格式(缩进和粗体)。好心的建议

    <button type="button" onclick="searchDetails('<?php echo $r['_source']['file']['filename']; ?>',
      '<?php header('Content-Type: text/html; charset=UTF-8');  
        echo htmlentities( $r['_source']['content']); ?>',
      '<?php echo addslashes($r['_source']['path']['real']); ?>',
      '<?php echo $q ?>')"
      class="btn btn-info btn-sm openBtn" data-toggle="modal" > Details </button>

在浏览器控制台中捕获语法错误是很好的第一步。接下来,查看呈现页面的源代码。作为一名PHP开发人员,您的工作是输出有效的html、css和JavaScript,以使页面呈现。当控制台中出现语法错误时,这意味着JavaScript。它在浏览器端运行,因此必须在浏览器中调试

这里要做的是编写JavaScript
searchDetails()
函数的JavaScript调用。但是您希望通过php
头调用实现什么呢?我不知道
searchDetails
做了什么,但是
header
适用于php正在呈现的页面。它不适用于文件内容。您可以为网页设置内容类型标题,但不能将标题放在JavaScript字符串中。您可以将标题的字符串值放在JavaScript中,但这实际上不会向浏览器描述任何内容的类型

我认为htmlentities可能足以公开文件的内容,但PDF、文档和电子表格将以这种方式看起来非常时髦。不确定您希望它看起来是什么样子,但您可能希望使用不同的http请求为这些文件的内容提供服务,以便它们可以具有不同的头(esp内容类型)。我无法理解
htmlentities(电子表格内容)
将如何成为一个有价值的字符串来显示

一般来说,从php(或任何模板)呈现JavaScript是我建议您避免的模式。编写静态JavaScript,并使用清晰的机制向JavaScript公开数据。它充满了困难,包括很难编写(在相同的代码中引用和转义js、php、html)和调试(例如语法错误),并且在面对进一步的开发时常常无法保持健壮

我可能会生成一个描述文件数据的json文件,然后通过JavaScript读取该文件,并使用js库(可能是Vue.js)呈现页面。正如我提到的,我将构建一个单独的php资源来提供文件内容,这样我就可以在上面添加ContentType头。如果您这样做,请绝对确保您没有提供索引之外的文件。如果可能,最好从文件在索引中的位置请求文件,而不是通过路径来避免请求暴露eg/etc/shadow

如果你想让网页认为这主要是以JavaScript为中心的开发。使用PHP生成数据,但尽量使HTML和JS保持静态。选择一个JavaScript库——不要陷入认为原始js“更简单”或“更直接”的陷阱;不是。如果您没有首选项,我建议使用Vue,但Angular、React、甚至d3.js都可以在这里使用。您的数据契约将更加明确,并且您将能够独立地开发后端和前端,从而在破解JavaScript端时提供后端工作的一些信心。这似乎是一个很大的复杂问题,但如果你尝试一下,我想你会很快体验到这是多么容易