繁体   English   中英

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

[英]How to pass a string with special characters in php so I can display it on page

我有一个 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>

在浏览器控制台中捕获语法错误是很好的第一步。 接下来,查看渲染页面的来源。 As a PHP developer, your job is to output valid html, css, and in your case JavaScript to get your page to render. 当您在控制台中收到语法错误时,这意味着 JavaScript。 它在浏览器端运行,因此必须在浏览器中进行调试。

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

我想 htmlentities 可能足以公开文件的内容,但是 pdf、文档和电子表格这样看起来会很时髦。 不确定您希望它看起来像什么,但您可能希望通过不同的 http 请求来提供这些文件的内容,以便它们可以具有不同的标头(尤其是 Content-Type)。 我无法理解htmlentities(spreadsheet_content)将如何成为一个有价值的字符串来显示。

一般来说,我建议你避免从 php (或任何模板)渲染 JavaScript 。 编写 static JavaScript 并有明确的机制将数据暴露给 JavaScript。 它充满了困难,包括非常难以编写(引用和 escaping 用于 js,php,html 都在同一代码中,并且无法在您的面部进一步开发中进行稳健的调试)和调试。

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

如果您想让网页主要将其视为以 JavaScript 为中心的开发。 使用 PHP 生成数据,但尽量将 HTML 和 JS 保持为static 选择 JavaScript 库——不要陷入认为 raw js 是“更简单”或“更直接”的陷阱; 它不是。 如果你没有偏好,我推荐 Vue,但 Angular、React,甚至 d3.js 都可以在这里工作。 您的数据合同将更加明确,您将能够单独开发后端和前端,从而在您破解 JavaScript 端时提供后端工作的信心。 以这种方式解决问题似乎很复杂,但如果你试一试,我想你会很快体验到它是多么容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM