【问题标题】:Remove "%0D%0A" from URL (PHP) [duplicate]从 URL (PHP) 中删除“%0D%0A”[重复]
【发布时间】:2021-04-25 12:54:11
【问题描述】:

我有一个购物清单页面,它在每个产品下方显示一个“更多信息”按钮以显示其完整信息。所有这些信息都是从我的 txt 文件中读取的。每个产品都有一个唯一的产品 ID。因此,“更多信息”按钮会将产品 ID 从购物清单页面传递到完整信息页面,在此它将与产品 ID 数组进行比较并显示它。现在,如果我在 URL 中删除 "%0D%0A",它只能显示我的完整信息。有没有办法解决这个问题?

实际网址:http://localhost/php/test2/fullInfo.php?Submit=def-4332-99%0D%0A

我的 txt.file

abc-1234-99
Cedric
93482812
cedric@hotmail.com
Guitar
2000
Yamaha
null
New
---------------------------------------------
def-4332-99
Wendy
98238432
wendy@hotmail.com
Guitar
2010
Yamaha
Scratches on the side
Used
---------------------------------------------
fgh-4567-99
Jason
98238432
wendy@hotmail.com
Guitar
2010
Yamaha
Scratches on the side
Used

我的按钮($line0 是我从 txt 文件中读取的产品 ID 数组。)

<?php
    $item = count($line0);
    for ($c=0; $c<$item; $c++) {
        $value4 = $line4[$c];
        $value8 = $line8[$c];
        $value0 = $line0[$c];
             
        echo "<td><b>Product ID: $value0</b><br>Instrument: $value4<br>Condition: $value8";             
        ?>
        <form method="get" action="fullInfo.php">
        <input type="hidden" name="Submit" value="<?php echo htmlspecialchars($value0); ?>" />
        <input type="submit" class="submit" value="More information" /> 
        </form>

我的 fullInfo.php 页面(所以我对这个页面的问题是我能够成功执行 preg_match,但它无法回显 $line0 - $line8,除非我从 URL 中删除 "%0D%0A"

    <?php
        
    $handle = @fopen('listings.txt', "r");
    $row = 0;
    $count = 0;
    $line0 = [];
    $line1 = [];
    $line2 = [];
    $line3 = [];
    $line4 = [];
    $line5 = [];
    $line6 = [];
    $line7 = [];
    $line8 = [];
    $line9 = [];
        
    if ($handle) { 
       while (!feof($handle)) { 
           $store = fgets($handle, 4096); 
           if ($row == 10){
            $row = 0;
            $count++;
        }
        if ($row == 0) 
        {
            $line0[] = strval($store);
        }
        else if($row == 1) {
    $line1[] = strval($store);}
        else if($row == 2) {
    $line2[] = strval($store);}
        else if($row == 3) {
    $line3[] = strval($store);}
        else if($row == 4) {
    $line4[] = strval($store);}
        else if($row == 5) {
    $line5[] = strval($store);}
        else if($row == 6) {
    $line6[] = strval($store);}
        else if($row == 7) {
    $line7[] = strval($store);}
        else if($row == 8) {
    $line8[] = strval($store);}
        
        $row++;
       }
            
          $id = 0;
          
          
        if (isset($_GET['Submit'])) {
            $id=$_GET['Submit'];
        }
        
            
          $item = count($line0);
          
            for ($c=0; $c<$item; $c++)
        {
    
            if(preg_match("/$id/",$line0[$c])) {
            echo $line0[$c],"<br>";
            echo $line1[$c],"<br>";
            echo $line2[$c],"<br>";
            echo $line3[$c],"<br>";
            echo $line4[$c],"<br>";
            echo $line5[$c],"<br>";
            echo $line6[$c],"<br>";
            echo $line7[$c],"<br>";
            echo $line8[$c],"<br>";
            break;
            }
        }
        ?>
    
    <?php
   fclose($handle); 
} 
    ?>

【问题讨论】:

  • %0D%0ACR(回车)和LF(换行)字符(Windows 行尾)的 URL 编码值。似乎某处缺少trim()
  • $value0 = rtrim($line0[$c]); 在生成错误 url 之前修复它。此外,在 PHP 中,elseif 应该是一个词。你的代码很 W.E.T.

标签: php html localhost


【解决方案1】:

你可以使用str_replace()函数

$my_url = "http://localhost/php/test2/fullInfo.php?Submit=def-4332-99%0D%0A";

$my_url_without_percent = str_replace("%0D", "", $my_url);
$my_url_without_percent = str_replace("%0A", "", $my_url_without_percent);
//Output: "http://localhost/php/test2/fullInfo.php?Submit=def-4332-99"

这对你有帮助还是我不明白你的问题?

【讨论】:

  • str_replace() 可以接收一个数组作为第一个参数。此问题可能会作为重复问题关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 2010-12-20
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多