Я передаю имя папки и путь через $ _GET. Все хорошо, пока я не передам имя папки, содержащей и (&) амперсанд, а затем имя папки сокращается. то есть проверка имени папки & Заменить замкнут на «тест».
Пробовал str_repalce, htmlentites, htmlspecialchars
$dir_path = $_GET['path'].$_GET['folder'];
Весь код:
<div class="panel-body" style="font-size:14px">
<?php
if(isset($_GET['path'])){
$dir_path = $_GET['path'].$_GET['folder']."/";
echo "full path = ".$dir_path."<br>folder = ".$Folder;
}else{
$dir_path = PUBLICPATH."/Folderholder/".$branch."/"; // branch url to that branchs folders and in $_GET['folder'];
}
//$dir = opendir($dir_path);
$mappath = str_replace(PUBLICPATH."/Folderholder/","",$dir_path);
echo "<p><i class='fa fa-sitemap'> <b>".$mappath."</b></i></p>\n"; ?>
<div class="row">
<div class="col-md-6">
<?php
echo "<button onclick='goBack()' class='btn btn-primary btn-sm'>Return</button><P>\n";
?>
</div>
<div class="col-md-6">
<?php
if(parent::$UM->get('Level') !== 'User' and $branch !== 'Main-Admin'){
echo "<a href='uploadfrm?path=".$dir_path."' class='btn btn-primary btn-sm'>Upload to this folder</a>";
}elseif(parent::$UM->get('Level') == 'Main-Admin'){
echo "<a href='uploadfrm?path=".$dir_path."' class='btn btn-primary btn-sm'>Upload to this folder</a>";
}
?>
</div>
</div>
<div class="row"><div class="col-md-12"> </div></div>
<table width="70%">
<?php
$files = scandir($dir_path);htmls
foreach ($files as $file)
{
if($file != "." && $file != "..")
{
echo "<tr>\n";
if(is_dir($dir_path.$file)){
echo "<td><i class='fa fa-folder'></i> <a href='".BASEURL."Folderholder/userdash?path=".$dir_path."&folder=".$file."'>$file</a></td>\n";
echo "<td> </td>\n";
}else{
echo "<td><i class='fa fa-download'></i> ".$file."</td>\n<td><a href='http://downloadfolder/download1.php?file=".$dir_path.$file."' target='_Blank'>Download</a></td>\n";
}//change path as required
echo "</tr>\n";
}
}
?>
</table>
</section>
</div>
&
Символ используется для разделения пар ключ = значение в строке запроса.
Когда вы генерируете строку запроса, вы должны выразить ее как escape-последовательность: %26
,
То, как вы это сделаете, зависит от того, как вы генерируете строку запроса.
Вы отметили это PHP, но код PHP, которым вы поделились, чтение данные. Вы не показали нам код для его генерации, но предполагали, что является еще PHP:
Для генерации в PHP вы обычно используете http_build_query
:
$query = http_build_query(Array( path => "example&example", folder => "example&example" ));
urlencode
должен сделать свое дело. Он специально используется для передачи параметров в URL для использования в качестве переменных, как вы делаете в своих GET.
использование urlencode
закодировать URL как:
$encodedURL = urlencode ('Your url');
Объяснение: urlencode
будет кодировать специальные символы в значения их сущностей и затем использовать их.
Хотя предыдущие ответы в этой теме не являются неправильными, пожалуйста, также подумайте об использовании rawurlencode как это будет генерировать более совместимым со стандартами (RFC 3986) URI. UrlEncode запускает устаревшую кодировку, в которой пробелы заменяются знаками плюса. (Кто-нибудь помнит это?)
Чтобы остановить обрезку имени папки.
Два изменения кодирования $ dir_path = $ _GET [‘path’]. $ _ GET [‘folder’]. «/»; изменился на
$dir_path = $_GET['path'].rawurldecode($_GET['folder'])."/";
а также echo "<td><i class='fa fa-folder'></i> <a href='".BASEURL."Folderholder/userdash?path=".$dir_path."&folder=".$file."'>$file</a></td>\n";
изменился на
echo "<td><i class='fa fa-folder'></i> <a href='".BASEURL."Folderholder/userdash?path=".$dir_path."&folder=".rawurlencode($file)."'>$file</a></td>\n";
<div class="panel-body" style="font-size:14px">
<?php
if(isset($_GET['path'])){
$dir_path = $_GET['path'].$_GET['folder']."/";
}else{
$dir_path = PUBLICPATH."/Folderholder/".$branch."/"; // branch url to that branchs folders and in $_GET['folder'];
}
//$dir = opendir($dir_path);
$mappath = str_replace(PUBLICPATH."/Folderholder/","",$dir_path);
echo "<p><i class='fa fa-sitemap'> <b>".$mappath."</b></i></p>\n"; ?>
<div class="row">
<div class="col-md-6">
<?php
echo "<button onclick='goBack()' class='btn btn-primary btn-sm'>Return</button><P>\n";
?>
</div>
<div class="col-md-6">
<?php
if(parent::$UM->get('Level') !== 'User' and $branch !== 'Main-Admin'){
echo "<a href='uploadfrm?path=".$dir_path."' class='btn btn-primary btn-sm'>Upload to this folder</a>";
}elseif(parent::$UM->get('Level') == 'Main-Admin'){
echo "<a href='uploadfrm?path=".$dir_path."' class='btn btn-primary btn-sm'>Upload to this folder</a>";
}
?>
</div>
</div>
<div class="row"><div class="col-md-12"> </div></div>
<table width="70%">
<?php
$files = scandir($dir_path);htmls
foreach ($files as $file)
{
if($file != "." && $file != "..")
{
echo "<tr>\n";
if(is_dir($dir_path.$file)){
echo "<td><i class='fa fa-folder'></i> <a href='".BASEURL."Folderholder/userdash?path=".$dir_path."&folder=".$file."'>$file</a></td>\n";
echo "<td> </td>\n";
}else{
echo "<td><i class='fa fa-download'></i> ".$file."</td>\n<td><a href='http://downloadfolder/download1.php?file=".$dir_path.$file."' target='_Blank'>Download</a></td>\n";
}//change path as required
echo "</tr>\n";
}
}
?>
</table>
</section>
</div>