我创建了一个 CMS,它根据客户提供的页面标题创建一个页面。
例如,“关于我们”被创建为“about-us.php”
它目前使用以下内容来删除所有不允许的字符,我在代码中添加了当您去编辑页面并将其命名为其他名称以便重命名文件时。
function toAscii($str) {
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[\/_|+ -]+/", '-', $clean);
return $clean;
}
// Renames the file
rename(toAscii($row_Recordset1['content_title']).".php", toAscii($_POST['content_title']).".php");
但我真的想允许这些特殊字符,所以我修改了上面的函数来执行以下操作:
function toAscii($str) {
$clean = strtolower($str);
$clean = str_replace(";", "%3B", $clean);
$clean = str_replace("/;", "%2F", $clean);
$clean = str_replace("?", "%3F", $clean);
$clean = str_replace(":", "%3A", $clean);
$clean = str_replace("&", "%26", $clean);
$clean = str_replace("@", "%40", $clean);
$clean = str_replace("=", "%3D", $clean);
$clean = str_replace(" ", "-", $clean);
return $clean;
}
// Renames the file
rename(toAscii($row_Recordset1['content_title']).".php", toAscii($_POST['content_title']).".php");
我知道它并不优雅,但它应该在理论上起作用。
它没有。
因此,当文件名应该是“shows-%2F-exhibitions.php”时,它实际上会显示为“shows-/-exhibitions.php”,这显然是不允许的。
如何强制它保留文件名中的十六进制代码,而不是应用十六进制代码并再次以正斜杠结束?
还是您只是不允许在 URL 中使用任何形状或形式的正斜杠?