我有一个奇怪的问题。我们公司收集数据,我们使用一款恐怖的软件来处理我们所有的电话采访。它使用二进制文件而不是SQL,并且不压缩。截至目前,我们必须为客户端手动运行所有报告。我正在为我们的数据和常用报告构建Web界面。现在,我需要将所谓的“选择语句”从Web传递到服务器,并使用php post方法执行此操作。问题是Web浏览器似乎不喜欢select语句中必须使用的某些字符。我曾尝试对它们进行编码,但是当它们是超链接时,浏览器会自动将它们反编码回纯文本。这是一些示例选择语句。[3023.2#1][3023.2$] = "1"[3023.2<>1][500.10$] = "Name"网址看起来像CustomReport.php?type=1&select="[3023.2#1]"我的问题是,不同的选择语句会根据所使用的报价而使网站中断。 select = [3023.2 1]不起作用,但select =“ [3023.2 1]”起作用。但是,如果我选择= [3023.2#1],它将起作用,并且使用引号将其破坏。而且当它损坏时,WebDev工具栏和FireBug都不会报告任何错误,但是很明显,我的DIV都被搞砸了。我还应该补充一点,该网站上没有显示select语句,它仅在php中作为exec命令的一部分使用,因此我对为什么这破坏了我的网站感到非常困惑。/绳端//可能有些愚蠢 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您要研究rawurlencode和htmlentities。他们应该极大地帮助您。旁白:必须留意匿名者在通过URL传递可执行命令时要谨慎的说明。听起来您的应用程序不在公共网络上,但是如果是这样,则需要注意与此相关的安全性问题。<?php$select_statements = array( '[3023.2#1]', '[3023.2$] = "1"', '[3023.2<>1]', '[500.10$] = "Name"',);foreach ($select_statements as $ss) { print htmlentities($ss); print "<br>"; $url = $_SERVER['PHP_SELF'] . "?type=1&amp;select=" . rawurlencode($ss); print "<a href=\"{$url}\">{$url}</a>"; print "<br>"; print "<br>";}print htmlentities($_GET['select']);?>结果(对我而言):  [3023.2#1]  /CustomReport.php?type=1&select=%5B3023.2%231%5D    [3023.2 $] =“ 1”  /CustomReport.php?type=1&select=%5B3023.2%24%5D%20%3D%20%221%22    [3023.2 1]  /CustomReport.php?type=1&select=%5B3023.2%3C%3E1%5D    [500.10 $] =“名称”  /CustomReport.php?type=1&select=%5B500.10%24%5D%20%3D%20%22Name%22而且,如果我单击一个链接,我也会看到我输入的任何内容。当然,正确放入html实体中。 (adsbygoogle = window.adsbygoogle || []).push({});
09-17 21:27