Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使返回的文本在URL中被截断的符号AND_Php_Urlencode - Fatal编程技术网

Php 使返回的文本在URL中被截断的符号AND

Php 使返回的文本在URL中被截断的符号AND,php,urlencode,Php,Urlencode,我从之前维护代码的人那里继承了几个php脚本。他没有编程经验,大多数情况下都是尽可能地把东西拼凑在一起。今天我不得不为wordpress重写一个插件文件,现在我不知道出了什么问题 我面临的问题是,当在作为表()一部分的else语句中放置返回的文件名时,我会得到意外的结果。假设我们的数据库有一个名为Black&White.pdf的文件。它不会返回显示名称“Black&White.pdf”,而是返回“Black”。我尝试了以下方法: <?php echo htmlentities($resul

我从之前维护代码的人那里继承了几个php脚本。他没有编程经验,大多数情况下都是尽可能地把东西拼凑在一起。今天我不得不为wordpress重写一个插件文件,现在我不知道出了什么问题

我面临的问题是,当在作为表(
)一部分的else语句中放置返回的文件名时,我会得到意外的结果。假设我们的数据库有一个名为Black&White.pdf的文件。它不会返回显示名称“Black&White.pdf”,而是返回“Black”。我尝试了以下方法:

<?php echo htmlentities($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>";
        }
}
函数显示文件($assn\u id){
全球$wpdb;
$second_db=新的wpdb(“xxxxxx”、“xxxxxx”、“xxxxxx”、“xxxxxx”);
$results=$second\u db->get\u results(“选择
community_files.id,
社区\u文件。显示\u名称,
community_files.filename,
community_files.sort,
社区文件。文件类型
从…起
社区档案
哪里
community_files.comm_id=“$assn_id.”
订购人
社区_files.sort ASC”);
如果(!$results){
echo“
  • 下次会议尚未发布。
  • ”; }否则{ 回声“; //一直排到下一排,直到没有更多的东西了 foreach($results作为$result){ 如果(!$result->显示\u名称){ $display\u name=str\u replace(“\u”,”,$result->filename); $display\u name\u fake=str\u replace(“.”、“.”、$display\u name); $file\u数组[$x]=$result->id; }否则{ $display\u name=$result->display\u name; $display\u name\u fake=str\u replace(“.”、“.”、$display\u name); $file\u数组[$x]=$result->id; } ?>
    当您将文件名插入正在构建的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,当您单击类似的按钮时,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>
    
    
    
    然后,在处理请求时,您需要
    $\u获取['filename']


    我建议您在文件名中不要使用空格和特殊字符,如
    &
    (如果您实际使用此名称作为文件系统文件名)。这是自找麻烦。

    ack…这看起来像是sql注入“踢我”签名…^^…和
    $wpdb
    有一个
    prepare
    方法来帮助防止这种情况发生。在将此文件名作为URL的一部分进行回显时,您是否遇到了此问题?此处不应该有空格或未编码的
    &
    。请尝试
    var\u dump($results)
    在查询并查看整个字符串--“Black&White.pdf”--是否来自数据库之后,您还应该查看呈现的HTML代码,它会让您了解错误所在。我进行了var_转储,它返回“Black&White.pdf”。这不是成为URL一部分的问题,它会导致浏览器中显示的内容出现问题。这非常有效。感谢您以清晰的方式解释,我感谢您的帮助!为什么不再使用+1?这似乎正好回答了问题。
    <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>