【问题标题】:Load a file with an umlaut in its name via jquery通过jquery加载名称中带有变音符号的文件
【发布时间】:2020-12-16 14:23:16
【问题描述】:

我需要通过 jquery 加载请求获取文件名中包含变音符号的文件的内容。我知道不建议在文件名中使用变音符号。

奇怪的是,我在不同的项目中使用完全相同的代码和相同版本的 jquery,它在那里工作得很好。

<a class="nav-link d-inline pl-1 pr-3" href="#" data-path="Ränge">

<script>
$(document).ready(function(){
            $(document).on('click','.nav-link, .internalLink', function(event){
                event.preventDefault();
                console.log('prevented default');
            });


            function loadContent(path, forward) {
                console.log(path);
                path = path.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) {
                        return letter.toUpperCase();
                    });
                console.log("tried to load: " + path);
                $('#content').hide('drop', function(){
                    $('#content').load('content/' + path + '.html', function(response, status, xhr){
                        if(status == 'error'){
                            if(xhr.status == '404'){
                                $('#content').load('content/404.html');
                            }
                            else {
                                $('#content').html('Es ist ein Fehler aufgetreten: ' + xhr.status + ' ' + xhr.statusText);
                            }
                        }
                        if(path == 'Startseite' || forward == false){
                            window.history.replaceState('MyWebsite | ' + path, path, '/' + path);
                        }
                        else {
                            window.history.pushState('MyWebsite | ' + path, path, '/' + path);
                        }
                        document.title = 'MyWebsite | ' + decodeURI(path);
                        $('#content').show('drop');                    
                    });
                });
            }

            var path = window.location.pathname == '/' ? 'Startseite' : window.location.pathname;
            path = path.replace('/', '');
            loadContent(path, true);

            window.onpopstate = function() {
                path = window.location.pathname;
                path = path.replace('/', '');
                loadContent(path, false);
            };

            $(document).on('click', '.nav-link, .internalLink', function(){
                path = $(this).attr('data-path');
                if(path == 'MusicBot'){
                    window.open('https://MyMusicBotWebsite.de');
                }
                else {
                    if(decodeURI(window.location.pathname.replace('/', '')) != path){
                        loadContent(path, true);
                    } 
                }
            });
        }); 
</script>

consol 输出显示路径应该是“Ränge”,但我收到 404 错误,因为 ajax 请求尝试加载 https://MyWebsite.de/content/R%C3%A4nge.html,它应该加载 https://MyWebsite.de/content/Ränge.html

提前致谢

【问题讨论】:

  • 这是在远程服务器上吗?听起来可能是 WIN-to-Linux OS 文件系统问题。
  • 不要!只需将“Ränge.html”重命名为“Raenge.html”,并且不再在 URI 中使用元音变音
  • @yardpenalty.com 该项目位于由 Plesk 管理的 linux 服务器上,但另一个具有相同代码且运行良好的项目也在同一台服务器上
  • @TobAlt 您找到解决方案了吗?如果您能找到解决方案,请回答您自己的问题。谢谢!

标签: jquery ajax urlencode plesk diacritics


【解决方案1】:

这是一个与 Plesk 相关的问题...

我真傻,我使用了 Plesk 网络界面的 zip 上传功能,文件显示为 Ränge.html

所以今天我查看了使用相同加载脚本的两个网站的 http 日志。 Plesk 说它找不到 Ränge.html,因为该文件不存在,但在其他网站上却可以。我打开 Filezilla 并通过 FTP 查看文件并看到:Rдnge.html

所以 Pleks 在其 web 界面/文件管理器中显示了正确的文件名,但磁盘上的文件没有正确的名称。

所以解决这个问题的方法是通过 FTP 而不是通过 Plesk 网络界面上传文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2012-05-26
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多