javascript - 如何在 PHP 中正确解码 javascript 编码的 URI?

标签 javascript php mysql dynamic

我已经使用 JS/PHP/MySQL 创建了一个动态下拉列表,但似乎我的 PHP 中的 UTF8 解码遇到了一些问题。该脚本将用于制作一个小型应用程序,帮助我的客户找到符合他们标准的产品。我们销售的面板仪表可以接受不同的输入范围,许多仪表都用 +/- 或值表示(例如:仪表可以处理指定电压周围 +/- 10V 的电压。)一切都开始正常工作在我的脚本中,除了通过(+、/、±、½等)解析某些字符时,我的数据库最初使用±表示加号或减号,但后来我切换到+/-(三个字符),希望它能修复特殊字符问题,但它没有...

使用 console.log 我发现我的 JS 正确编码了特殊字符,但是一旦它到达我的 PHP,它就无法正确解码。

一路上的一切都设置为UTF8

所以现在我仍然需要弄清楚为什么有些东西解析不正确。

您可以在http://new.foxmeter.com/find.php查看脚本的实时版本。 .

这是我前端的重要部分

    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script>        
        $(function(){
            $("#type").change(function() {
                var tval = document.getElementById('type').value;
                $("#range").load(encodeURI("findbackend.php?type=" + tval));
            });
            $("#range").change(function() {
                rval = document.getElementById('range').value;
                $("#power").load(encodeURI("findbackend.php?range=" + rval));
                console.log(encodeURIComponent(document.getElementById('range').value));
            });
            $("#power").change(function() {
                //var rval = document.getElementById('range').value;
                psval = document.getElementById('power').value;
                $("#setpoint").load(encodeURI("findbackend.php?range=" + rval + "&power=" + psval));
            });
            $("#setpoint").change(function() {
                //var rval = document.getElementById('range').value;
                //var psval = document.getElementById('power').value;
                stval = document.getElementById('setpoint').value;
                $("#output").load(encodeURI("findbackend.php?range=" + rval + "&power=" + psval + "&setpoint=" + stval));
            });
          });
    </script>

</head>
<body>
    <!-- Google Analytics Script -->
    <?php include_once("scripts/analyticstracking.php") ?>

    <div class="wrapper"> <!-- Sticky Footer Wrapper -->
        <div id="panorama"></div>
        <div id="header">
            <?php include("include/header/banner.php") ?>
            <?php include("include/header/nav.php") ?>
            <?php include("include/header/quicksearch.php") ?>
        </div>
        <div id="content">
            <div id="findoptions">
                <select id="type" class="finddrops">
                    <option selected value="base">Please Select</option>
                    <option value="DC Voltage">DC Voltage</option>
                    <option value="DC Current">DC Current</option>
                    <option value="AC Voltage">AC Voltage</option>
                    <option value="AC Current">AC Current</option>
                    <option value="Strainguage">Strainguage</option>
                </select>
                <br>
                <select id="range" class="finddrops">
                    <option>Please choose from above</option>
                </select>
                <br>
                <select id="power" class="finddrops">
                    <option>Please choose from above</option>
                </select>
                <br>
                <select id="setpoint" class="finddrops">
                    <option>Please choose from above</option>
                </select>
                <br>
                <select id="output" class="finddrops">
                    <option>Please choose from above</option>
                </select>
                <br>
                <select id="blarg" class="finddrops">
                    <option>Please choose from above</option>
                </select>                   
            </div>
            <div id="findresults" class="finddrops">
            </div>
        </div>
    </div>

这是我在后端运行的 PHP:

<?php
    //\\ MODULAR DEPENDANT DROPDOWNS \\//

    //creates DB connection
    $dbHost = 'host';
    $dbUser = 'user'; 
    $dbPass = 'password';
    $dbDatabase = 'database';
    $con = mysql_connect($dbHost, $dbUser, $dbPass) or trigger_error("Failed to connect to MySQL Server. Error: " . mysql_error());

    mysql_select_db($dbDatabase) or trigger_error("Failed to connect to database {$dbDatabase}. Error: " . mysql_error());

    //prevents injections
    //any order
    $type = mysql_real_escape_string(urldecode($_GET['type']));
    isset($_GET['range'])?$range = mysql_real_escape_string(urldecode($_GET['range'])):"";
    isset($_GET['power'])?$power = mysql_real_escape_string(urldecode($_GET['power'])):"";
    isset($_GET['setpoint'])?$setpoint = mysql_real_escape_string(urldecode($_GET['setpoint'])):"";

    //forms the query depending on what data is recieved through GET
    //first option on the bottom; last option on the top to avoid conflicts 
    if (isset($_GET['setpoint'])) {
        $query = "SELECT DISTINCT stp FROM meters WHERE sio='$range' AND pso='$power' AND stp='$setpoint' ORDER BY model";
    } elseif (isset($_GET['power'])) {
        $query = "SELECT DISTINCT stp FROM meters WHERE sio='$range' AND pso='$power' ORDER BY model";
    } elseif (isset($_GET['range'])) {
        $query = "SELECT DISTINCT pso FROM meters WHERE sio='$range' ORDER BY model";
    } else {
        $query = "SELECT DISTINCT sio FROM meters WHERE sit LIKE '%$type%' ORDER BY model";
    }

    //creates a result array from query results
    $result = mysql_query($query);

    //outputs dropdown options dependent on what GET variables are set
    //first option on the bottom; last option on the top to avoid conflicts
    if (isset($_GET['setpoint'])) {
        while ($row = mysql_fetch_array($result)) {
            echo "<option value='" . $row{'stp'} . "'>" . $row{'stp'} . "</option>";
        }
    } elseif (isset($_GET['power'])) {
        echo "<option>Choose Setpoint Options</option>";
        while ($row = mysql_fetch_array($result)) {
            $row{'stp'} = ucfirst($row{'stp'}); //capitalizes the first letter; necessary?
            echo "<option value='" . $row{'stp'} . "'>" . $row{'stp'} . "</option>";
        }
    } elseif (isset($_GET['range'])) {
        while ($row = mysql_fetch_array($result)) {
            echo "<option value='" . $row{'pso'} . "'>" . $row{'pso'} . "</option>";
        }
    } else {
        while ($row = mysql_fetch_array($result)) {
            echo "<option value='" . $row{'sio'} . "'>" . $row{'sio'} . "</option>";
        }
    }

    //Thanks to Chris Coyier for the wonderful examples on CSS-Tricks
    //A Web Application by Zach Klemp
?>

再次,您可以查看脚本 here .

在第一个下拉列表中选择直流电压,然后在第二个下拉列表中选择 +/- 选项,以查看问题开始的位置。当您在第一个下拉列表中选择应变计,然后单击“30 mV,10 V DC 激励”时,它会进行精细解析。 (顺便说一句,我遇到的另一个问题是,选择第一个结果而不单击另一个第一个结果不会触发 .change)

感谢您为实现此功能提供的所有帮助!我一直在尝试解决这个问题,但还没有找到解决方案。

最佳答案

在您的 PHP 文件中尝试一下:

替换任意 echo XXXX;使用 utf8_decode(XXXX)

应该可以正常工作

关于javascript - 如何在 PHP 中正确解码 javascript 编码的 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18918901/

相关文章:

javascript - 检查多个数组值是否相等

javascript - 检查一个 HTML 对象是否在另一个 HTML 对象中

php - 显示总注册用户

php - Angular 4 CLI - 从 PHP 文件获取响应?

php - Laravel 5.2 : Redraw DataTable is not working But ajax. 重新加载()正在工作

java - Java中基于用户输入的MySQL查询

php - Cakephp在default.ctp处显示数据mysql

Javascript:用for循环提示和打印

javascript - 在随机 Javascript 中将 RGB 值转换为 HSL 值

php - "static"关键字在 PHP 中是必需的吗?