php GET变量被&符号(&)中断

时间:2017-01-22 12:34:44

标签: php .htaccess url get

SOLUTION:

似乎htaccess需要'B'才能保留&符号 所以使用

RewriteRule ^album/([a-zA-Z0-9-=_.]+)$ view.php?album=$1 [L,B]

工作

我正在尝试从url读取get值:

view.php?album=something

这是我在 .htaccess 文件中的规则之一:

#this rewrite 'view.php?album=something' to 'album/something'
RewriteRule ^album/([^/\.]+)/?$ ^view.php?album=$1 [L] 

问题是,有时专辑名称即'某事'可能包含和&在名称和这导致$ _GET绊倒。

**For example** 
album name is 'football&basketball'

The view.php page will only read up to football and throw an error.

如果没有重写规则,它的工作原理非常好,但是对于重写规则,它会因为一个案例而烦恼。

目前我正在使用 rawurlencode

如果没有&在名称中它也可以正常工作 - 它只与&当它搞砸了

有没有人对如何克服这个问题有任何建议?我尝试过使用htmlspecialchars和htmlentities等。

编辑:添加代码

htaccess的:

<IfModule mod_rewrite.c>
RewriteEngine On

#rewrite view.php?album=whatever to album/whatever
RewriteRule ^album/([a-zA-Z0-9-=_.]+)$ view.php?album=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

RewriteBase /ShyamJoshi/dist/ 

#remove .php and .html extension
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1.html [NC,L]


RewriteOptions Inherit
ReWriteCond %{HTTP:accept-encoding} (gzip.*) 
ReWriteCond %{REQUEST_FILENAME} !.+\.gz$ 
RewriteCond %{REQUEST_FILENAME}.gz -f 
RewriteRule (.+) $1.gz [QSA,L] 

</IfModule>

PHP:

此功能正在使用两次。首先它显示所有目录,然后它显示目录中的所有图像(这是'其他'部分)

function getImagesOrImageDirs($dirOnly) {
    $dirLoc = getcwd() . '/images/events/';

    $allDirs = preg_grep('/^([^.])/', scandir($dirLoc));

    echo '<div class="row">';
    if ($dirOnly == true) {
      foreach($allDirs as $dir) {
        $innerDirImages = preg_grep('/^([^.])/', scandir($dirLoc.'/'.$dir));
        $firstImageOfDir = reset($innerDirImages);

        /* view.php?album=something -> rewritten by htaccess to albums/something*/
        $href = 'album/'.$dir;

        // $href = 'album/'.$dir;
        $imageSrc = 'images/events/'.$dir.'/'.$firstImageOfDir;

        echo albumAndPhotoTemplate($href, $imageSrc, true, $dir, 'col-xs-12 col-sm-3');
      }
    } else {
      if (empty ($_GET['album']) ) {
        return ;
      }
      $albumName = $_GET['album'];
      print_r($albumName);
      $dirLoc = $dirLoc .'/'.$albumName;
      $allImages = preg_grep('/^([^.])/', scandir($dirLoc));

      foreach($allImages as $image) {
        $imgSrcAndHref = 'images/events/'.$albumName.'/'.$image;
        echo albumAndPhotoTemplate($imgSrcAndHref, $imgSrcAndHref, false, '',  'col-xs-12, col-sm-3');
      }
    }
    echo '</div>';
  }

1 个答案:

答案 0 :(得分:0)

试试这样..

RewriteEngine On

RewriteRule ^album/([a-zA-Z0-9-=_.]+)$ view.php?album=$1 [L]

使用

获取变量
$_GET['album'];

如果你想要变量和名字:

print_r($_GET);

要在网址上转义&,请使用此类%26 ..

view.php?album=something%26basketball

在此处查看更多escaping ampersand in url