0

JS/PHP/MySQL を使用して動的ドロップダウンを作成しましたが、PHP での UTF8 デコードに問題があるようです。このスクリプトを使用して、顧客が基準を満たす製品を見つけるのに役立つ小さなアプリケーションを作成します。さまざまな範囲の入力を受け入れることができるパネル メーターを販売しており、その多くは +/- または値で示されています (例: メーターは、指定された電圧の前後で +/- 10V の電圧を処理することが期待できます)。私のスクリプトでは、一部の文字が (+、/、±、½ など) で解析される場合を除きます。私のデータベースはもともと ± を使用してプラスまたはマイナスを示していましたが、修正されることを期待して +/- (3 文字) に切り替えました。特殊文字の問題ですが、そうではありませんでした...

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
?>

繰り返しますが、ここでスクリプトを表示できます。

最初のドロップダウンで DC 電圧を選択し、2 番目のドロップダウンで +/- オプションを選択して、問題の始まりを確認します。最初のドロップダウンで Straingauge を選択し、[10 V DC 励起で 30 mV] をクリックすると、問題なく解析されます。(そして、私が抱えている別の問題として、最初に別の結果をクリックせずに最初の結果を選択しても、.changeがトリガーされないということです)

これを機能させるためのすべての助けに感謝します! 私はこれを少し理解しようとしてきましたが、解決策は思いつきませんでした。

4

2 に答える 2

1

PHPファイルでこれを試してください:

エコー XXXX を置き換えます。utf8_decode(XXXX) で

それはそれを機能させるはずです

于 2013-09-20T14:34:42.567 に答える
0
$string = ';http%3A%2F%2Fwww.google.com%2F%3Fq%3Dtesting%2Burldecode'; 
echo urldecode($string); // http://www.google.com/?q=testing+urldecode

詳細については、こちらの urldecode に関する公式の PHP ドキュメントを参照してください。

于 2013-09-20T14:40:38.750 に答える