亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我該如何處理需要包含特殊字符的網址?

我該如何處理需要包含特殊字符的網址?

PHP
慕村9548890 2024-01-19 20:46:54
因此,最初我遇到了某些頁面未加載的問題,因為 url 具有特殊字符,如 '、! 等,但 url 是根據文件夾名稱創建的。如果用戶上傳的文件夾包含需要在回顯時顯示的特殊字符,如何將其從文件夾中刪除但在顯示鏈接時保留它?我在想,也許我不會給用戶一個命名文件夾并直接使用 mkdir 創建的機會,而是將他們選擇的文件夾名稱上傳到數據庫并創建一個僅具有遞增值的文件夾。我不知道這是否是一個好主意,或者我編寫的代碼是否有任何好處,所以我希望你們能給我一些建議,也許是一個解決方案?<?php # Get Variables$seriesGet = $_GET['series'] ?? "";$chapterGet = $_GET['chapter'] ?? "";$seriesDir = scandir("series/");print_r($seriesDir);echo "<br>";# Display Series foldersif (!$_GET) {    $arrayStart = 0;    foreach ($seriesDir as $series => $value) {        if ($seriesDir[$arrayStart] != "." && $seriesDir[$arrayStart] != "..") {            echo "<a href='testScript.php?series=". $seriesDir[$arrayStart] ."'>". $seriesDir[$arrayStart] ."</a>";        }        echo "<br>";        $arrayStart = $arrayStart + 1;    }}echo "<br>";# Display chapters in series folderif ($seriesGet && !$chapterGet) {    $chapterDir = scandir("series/" . $seriesGet . "/");    $seriesPath = "series/$seriesGet";    echo "<img src='$seriesPath/cover.jpg'>";    readfile("$seriesPath/description.txt");    echo "<br>";    $array2Start = 0;    foreach ($chapterDir as $series => $value) {        if ($chapterDir[$array2Start] != "." && $chapterDir[$array2Start] != ".." && $chapterDir[$array2Start] != "cover.jpg" && $chapterDir[$array2Start] != "description.txt") {            echo "<a href='testScript.php?series=". $seriesGet . "&chapter=" . $chapterDir[$array2Start] ."'>". $chapterDir[$array2Start] ."</a>";        }        echo "<br>";        $array2Start = $array2Start + 1;    }}# Display Imagesif ($seriesGet && $chapterGet) {    $dirname = "series/" . $seriesGet. "/" . $chapterGet . "/";    print_r($dirname);    $images = glob($dirname."*.{jpg,png}", GLOB_BRACE);    foreach($images as $image) {        echo '<img src="'.$image.'" /><br />';    }}
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

要對 URL 中的保留實體(特殊字符)進行編碼,請使用百分比編碼。

例如,感嘆號!被編碼為%21。對于您提到的字符,您可以查閱 ASCII 表來了解其值應該是什么。

我在想,也許我不會給用戶一個命名文件夾并直接使用 mkdir 創建的機會,而是將他們選擇的文件夾名稱上傳到數據庫并創建一個僅具有遞增值的文件夾。

是的,您絕對不應該讓用戶選擇磁盤上文件的名稱。如果您這樣做并且不非常小心,則可能會受到一系列攻擊。最常見的情況是用戶上傳可執行內容,或使用相對路徑寫入其他位置。例如,他們可能會上傳something-evil.php,并且您的網絡服務器可能配置錯誤,并且在訪問 時實際上運行了他們的代碼https://example.com/uploads/something-evil.php?;蛘撸苍S他們上傳類似內容../../../../etc/init.d/evil-script并在您的服務器上運行。

正如您所提議的那樣,通過不允許用戶控制文件名來完全避免問題更容易。只需確保它們無法覆蓋其他文件,或者根本無法命名這些文件,即使它們位于另一個文件夾中。

現在,讓我們檢查一下您的代碼......

$chapterDir?=?scandir("series/"?.?$seriesGet?.?"/");

這很危險!用戶指定要讀取的路徑。正如我上面所說,您實際上允許他們插入相對路徑并讀取 PHP 可以讀取的任何內容。配置錯誤的 Web 服務器很常見,您不希望它們從存儲中讀取不應該讀取的內容。

echo?"<a?href='testScript.php?series=".?$seriesDir[$arrayStart]?."'>"...

切勿將任意數據連接到 HTML 上下文中!這里實際上存在多個問題。首先,您必須對 URL 中使用的任何內容進行 URL 編碼。使用urlencode()。其次,您的數據不會針對 HTML 進行轉義,因此某些數據可能會在某些腳本標記或其他內容中泄漏,甚至只是使您的 HTML 無效。使用htmlspecialchars()您注入到 HTML 中的任意數據,即使它是您自己的可信數據。您要將數據從一個上下文移動到另一個上下文,并且需要對其進行正確轉義。

查看完整回答
反對 回復 2024-01-19
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

一個好的文件名約定會對你將來有好處。不要給用戶太多的自由,在命名文件和文件夾時也可以遵循Window計算機的命名約定。

查看完整回答
反對 回復 2024-01-19
  • 2 回答
  • 0 關注
  • 232 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號