@@ -6,6 +6,7 @@ import (
"encoding/json"
"fmt"
"net/http"
+ "net/url"
"os"
"strconv"
"strings"
@@ -279,7 +280,7 @@ func (a *SUBController) subClashs(c *gin.Context) {
a.ApplyCommonHeaders(c, header, a.updateInterval, a.subTitle, a.subSupportUrl, profileUrl, a.subAnnounce, a.subEnableRouting, a.subRoutingRules)
if a.subTitle != "" {
// Clash clients commonly use Content-Disposition to choose the imported profile name.
- c.Writer.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename*=UTF-8''%s`, a.subTitle))
+ c.Writer.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename*=UTF-8''%s`, url.PathEscape(a.subTitle)))
}
c.Data(200, "application/yaml; charset=utf-8", []byte(clashSub))