如何使用带有unicode字符的php$\u GET变量?

如何使用带有unicode字符的php$\u GET变量?,php,jquery,unicode,Php,Jquery,Unicode,在地址栏中单击后,我得到index.php?ch=strašni mikroskop。没关系,但不包括chapters/strašni mikroskop文件 如果我将š替换为s-一切都正常 那么,如何使用#unicode字符使用上述代码呢 所有文件都编码为utf8 $(".linkL").click(function() { var a = $(this).html(); var b = a.split(' ').join('-'); var c = b.toLower

在地址栏中单击后,我得到index.php?ch=strašni mikroskop。没关系,但不包括chapters/strašni mikroskop文件

如果我将š替换为s-一切都正常

那么,如何使用#unicode字符使用上述代码呢

所有文件都编码为utf8

$(".linkL").click(function() {
    var a = $(this).html();
    var b = a.split(' ').join('-');
    var c = b.toLowerCase();
    location.href = "index.php?ch=" + c;
});
您需要在这里对组件C进行编码。否则,URL中的任何特殊字符,如%或&,都将破坏URL。这也确保了URL中使用的编码是UTF-8;如果没有显式编码,发生什么事情取决于浏览器,您可能会得到不一致的结果

location.href = "index.php?ch=" + c;
问题1:文件名的编码必须与URL中的编码相同。这意味着您需要配置文件传输工具以使用UTF-8,具体操作方式取决于该工具。如果您的服务器是Windows,则无法使用UTF-8,因此必须故意对文件名进行错误编码。例如,对于西欧服务器,它将使用代码页1252,在这种情况下,您必须将文件straÅni-mikroskop.php拼写错误

它可能不值得尝试这样做,因为它很脆弱,当您移动到不同的工具和服务器时,它会崩溃

问题2:这是安全漏洞。攻击者可以提供任意相对路径名,如../someotherdirectory/x,以执行您意想不到的文件。这可能与文件上载等其他功能相结合,使攻击者能够在服务器上执行任意代码。或者可以只包含index.php本身,以获得无限循环并关闭服务器

使用安全编码方案可以避免这两个问题。例如,使用bin2hexc,您可以调用文件73747261c5a16e692d696b726f736b6f70.php,它可以在任何地方工作,并避免使用像/这样的路径特殊字符

但一般来说,最好不要让用户选择任意的PHP文件。通常最好在脚本中有一个静态的可能性列表;然后你可以随意调用你的文件。乙二醇

$chapter = "chapters/" . $_GET["ch"] . ".php";
include $chapter;

问题3。用a标记链接对于可访问性、可用性和SEO来说都是非常糟糕的。为什么不直接使用普通链接?

试试$chapter=rawUrlEncodeChepters/$_得到[ch]。php@Michel,谢谢,但它不起作用。可能是服务器不喜欢文件名和文件夹名中的特殊字符。尝试在js location.href=index.php?ch=strašni mikroskop中硬编码链接;如果它仍然不能工作,可能是服务器。
$chapter = "chapters/" . $_GET["ch"] . ".php";
include $chapter;
switch ($_GET['ch']) {
    case 'strašni-mikroskop': include 'chapters/strasni-mikroskop.php'; break;
    case '☃':                 include 'chapters/snowman.php';           break;
    ...
}