0

以前にコードを保守していた人から、いくつかの php スクリプトを継承しました。彼はプログラミングの経験がなく、できる限り最善を尽くして物事をまとめました。今日、ワードプレスのプラグイン ファイルを書き直さなければなりませんでしたが、何が問題なのかわかりません。

私が直面している問題は、テーブル ( ) の一部である else ステートメントで返されたファイル名を表示すると、<?php echo $result->display_name; ?>予期しない結果が得られることです。データベースに Black & White.pdf というファイルがあるとします。display_name "Black & White.pdf" を返す代わりに、"Black" を返します。私は次のことを試しました:

<?php echo htmlentities($result->display_name); ?>

<?php echo htmlspecialchars($result->display_name); ?>

どちらも望ましい結果を生み出していません。何がうまくいかないのですか?これは私の側のPHPの無知ですか、それともWPが結果を返す方法に関するものですか(WPがphpの解析方法を変更できるとは思わないので、違いはないと思います)。参考までに、コードは次のとおりです。

function display_files($assn_id) {
    global $wpdb;
    $second_db = new wpdb("xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx");

    $results = $second_db->get_results("SELECT
        community_files.id,
        community_files.display_name,
        community_files.filename,
        community_files.sort,
        community_files.file_type
        FROM
        community_files
        WHERE
        community_files.comm_id = '".$assn_id."'
        ORDER BY
        community_files.sort ASC");

        if (!$results) {
            echo "<li>The next meeting has not been posted yet.</li>";
        } else {

            echo "<table>";
            // keeps getting the next row until there are no more to get

            foreach ($results as $result) {
                if (!$result->display_name) {
                    $display_name = str_replace("_", " ", $result->filename);
                    $display_name_fake = str_replace(" .", ".", $display_name);
                    $file_array[$x] = $result->id;
                } else {
                    $display_name = $result->display_name;
                    $display_name_fake = str_replace(" .", ".", $display_name);
                    $file_array[$x] = $result->id;
                } ?>
                    <tr>
                        <td>
                        <?php
                        if ($result->display_name == "") {
                        ?>
                            <a href="renamefiles.php?action=rename&amp;file_id=<?php echo $result->id; ?>&amp;filename=<?php echo $display_name; ?>&amp;assn_id=<?php echo $assn_id; ?>"><?php echo $display_name_fake; ?></a>
                        <?php
                        } else {
                        ?>
                            <a href="renamefiles.php?action=rename&amp;file_id=<?php echo $result->id; ?>&amp;filename=<?php echo $display_name; ?>&amp;assn_id=<?php echo $assn_id; ?>"><?php echo $result->display_name; ?></a>
                        <?php
                        }
                        ?>
                        </td>
                    </tr>
                <?php   
            }
            echo "</table>";
        }
}
4

1 に答える 1

1

urlencode作成中の URL に挿入するときに、そのファイル名が必要なようです。上記のコメントによると、そうしないとGET文字列が壊れます。

array(5) { 
  ["action"]=> string(6) "rename" 
  ["file_id"]=> string(5) "24086" 
  ["filename"]=> string(8) "Black " 
  ["White_pdf"]=> string(0) "" 
  ["assn_id"]=> string(2) "25" 
}

これにより、投稿したコードが失敗していると結論付けました。そうではありません。不正な HTML を構築しているだけで、クリックすると失敗します。

このコード:

<a href="renamefiles.php?action=rename&amp;file_id=<?php echo $result->id; ?>&amp;filename=<?php echo $display_name; ?>&amp;assn_id=<?php echo $assn_id; ?>"><?php echo $result->display_name; ?></a>

次のようにする必要があります。

<a href="renamefiles.php?action=rename&amp;file_id=<?php echo $result->id; ?>&amp;filename=<?php echo urlencode($display_name;) ?>&amp;assn_id=<?php echo $assn_id; ?>"><?php echo $result->display_name; ?></a>

その後、リクエストを処理するときに必要になります。urldecode $_GET['filename']

ファイル名にスペースや特殊文字をまったく含めないことをお勧めします&(実際にこの名前をファイルシステムのファイル名として使用している場合)。あなたはトラブルを求めています。

于 2013-01-28T23:49:02.363 に答える