Амперсанд вызывает обрезание возвращаемого текста в URL

Я унаследовал несколько PHP-скриптов от человека, который занимался написанием кода раньше. У него не было опыта программирования, и он в основном собирал все, что мог. сегодня мне пришлось переписать файл плагина для WordPress, и теперь я не могу понять, что происходит не так.

Проблема, с которой я сталкиваюсь, заключается в том, что при воспроизведении возвращенных имен файлов в операторе 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>";
        }
}

Ответы на вопрос(1)

Ваш ответ на вопрос