javascript - php 生成的字符串未正确传递给 javascript 函数
问题描述
总结我有一个简单的Javascript函数
<script>
function PopUP($str) {alert($str);}
</script>
我正在尝试将一个长 JSON 字符串传递给 PopUP() 字符串是
{"Date":"2021-09-13 22:25:42","From":"simard57@hotmail.com","Sect":"Other","Villa#":"my villa","VillaName":"Resort","Owner":"Simard","OwnerSite":"https:\/\/donsimard.wix.com\/DomRepAI","BRs":"1 BR","StreetMBR":"0","StreetBR":"0","UpperMBR":"0","UpperBR":"0","LowerMBR":"0","LowerBR":"0","Comments":"testing"}
生成的 HREF 是
<a HREF="javascript:PopUP('{"Date":"2021-09-13 22:25:42","From":"simard57@hotmail.com","Sect":"Other","Villa#":"my villa","VillaName":"Resort","Owner":"Simard","OwnerSite":"https:\/\/donsimard.wix.com\/DomRepAI","BRs":"1 BR","StreetMBR":"0","StreetBR":"0","UpperMBR":"0","UpperBR":"0","LowerMBR":"0","LowerBR":"0","Comments":"testing"}')">JSON</a>
该链接似乎被截断并且没有被传递给 Javascript 函数。我错过了一些微不足道的事情吗?
---原帖---
我有一个表单正在由操作中的 php 文件处理。下面的代码片段。它收集通过 GET 传递的表单内容,并将 JSON 记录附加到日志文件的末尾
$pathToJSONFile ="LHVC_Logs/LHVCResortMapLog.json";
$jsonToLog = array(
"Date" => date("Y-m-d H:i:s"),
);
foreach ($_GET as $field => $entry) {
$jsonToLog[$field] = $entry;
}
$json = json_encode($jsonToLog);
$json .= PHP_EOL;
$bytes = file_put_contents($pathToJSONFile, $json, FILE_APPEND);
我还写了一个网页来在表格中显示日志。使用表单中的条目并显示 json 记录,因此如果接受为有效更新,则可以轻松地将其从日志移动到另一个 json 文件中。
读取 json 的相关代码如下。读取日志文件,并通过 EOL 记录分隔符将其转换为数组。$log 关联数组由 json 字符串索引,并指向一个关联数组,其中包含每条记录的内容。
$json = file_get_contents($logFile);
$lines = explode(PHP_EOL, $json);
$log = array();
foreach ($lines as $line) {
$log[$line] = json_decode($line,true);
}
在循环内创建一个 html 表
foreach ($log as $field => $entry)
...
$field = addslashes($field);
echo "<td><a HREF=\"javascript:PopUP('$field')\">JSON</a></td>";
}
PopUP 脚本非常简单,它在警告框中显示传递给它的字符串
function PopUP($str) {alert($str);})
我遇到的问题是 PopUP 无法正常工作,因为 json 字符串未正确传递。
<tr id=RV1 class=Royal>
<td style='text-align:right'> <a href="#RoyalVillas"> Royal </a> </td>
<td> <a HREF="javascript:PopUP('Link not yet available!\nCheck back soon.')"> RV1 </a> </td>
<td> </td><td> </td> <td style='text-align:left'> <details> <summary> 3 </summary>Street:1 MBR,0 BR <br> Upper:0 MBR,2 BR <br> Lower: MBR, BR <br> </details></td>
<td style='text-align:left'> Very nice. Highly recommended. Upstairs Theatre Seating </td>
<td><a HREF="javascript:PopUP('{\"Sect\":\"Royal\",\"Villa#\":\"1\",\"VillaName\":\"\",\"Owner\":\"\",\"OwnerSite\":\"\",\"BRs\":\"3\",\"StreetMBR\":\"1\",\"StreetBR\":\"0\",\"UpperMBR\":\"0\",\"UpperBR\":\"2\",\"LowerMBR\":\"\",\"LowerBR\":\"\",\"Comments\":\"Very nice. Highly recommended. Upstairs Theatre Seating\"}')">JSON</a></td></tr>
最后一个是不能正常工作的-第二个工作正常
我尝试删除将最后一个条目更改为的addslashes函数
<td><a HREF="javascript:PopUP('{"Sect":"Royal","Villa#":"1","VillaName":"","Owner":"","OwnerSite":"","BRs":"3","StreetMBR":"1","StreetBR":"0","UpperMBR":"0","UpperBR":"2","LowerMBR":"","LowerBR":"","Comments":"Very nice. Highly recommended. Upstairs Theatre Seating"}')">JSON</a></td>
看起来更漂亮但具有相同的症状。我相信这是因为引号,这就是为什么我首先做了addlashes。
很抱歉长时间的条目,但我希望我能得到一些关于如何完成我的意图的建议。
解决方案
呃——有趣的是,你的大脑如何说服自己,你的眼睛看到的是你的意图,而不是你所做的。
我将我的 php 更改为
$field=htmlspecialchars($field);
echo "<br><a HREF=\"javascript:PopUP('$field')\">JSON</a>";
现在一切都很好
感谢所有评论...
推荐阅读
- vega-lite - 如何将渲染器指定为 SVG?
- c# - 使用 datetimepicker c# 查询和过滤两个日期之间的数据
- excel - 将行范围复制到命名工作表
- vue.js - 从 sequelize promise vue 设置数据属性值
- javascript - 需要在一个 onDateChange 上调用 2 个不同的函数
- python - 尝试将 csv 加载到 es 时不支持 Content-Type header []
- regex - 在 Google 表格中提取部分字符串
- javascript - React 不渲染第二张地图
- javascript - 如何修复 Discord API:未知消息错误?
- python - Python - 仅提取第一个数字