URL 正在将 utf8 字符编码为 Oracle APEX js 重定向中的 %

URL is encoding utf8 chars to % in Oracle APEX js redirect

我的 Oracle APEX 页面的“页面加载时执行”部分有一个 jQuery 代码。我的页面包含 PL/SQL 个动态内容,更具体地说,是两个 select 列表,它们充当过滤器。因此,当 selected 其中一个 select 列表的值更改时,将调用具有正确页面项目值的重定向。 JQuery 下面的代码只处理调用页面重定向的第二个 select 列表。

var appId = $v('pFlowId');
var pageId = $v('pFlowStepId');

var this_page_link_prefix = 'f?p='+appId+':'+pageId+':::NO:RP:';

$(document).on('change', '#category_select', function() {
    if ($(this).val() != '') {
        var href = this_page_link_prefix+'P'+pageId+'_FILTER_CATEGORY,P'+pageId+'_FILTER_RACE_TYPE:'
        +$(this).val()+','+$('#race_type_select').val()+':';
        console.log(href);
        $(location).attr('href', href);
    }
});

这里遇到了自己无法解决的问题。当我的过滤器包含 UTF-8 字符(如“Ž”)时,url 以 % 编码进行编码。例如,当 select 列表包含“Ženy”时,我的重定向 URL 看起来像这样:

f?p=123:5:9348018667019::NO:RP:P5_FILTER_CATEGORY,P5_FILTER_RACE_TYPE:%25C5%25BDeny,1

当我尝试控制台日志 href 变量时,它包含正确的 URL:

f?p=123:5:9348018667019::NO:RP:P5_FILTER_CATEGORY,P5_FILTER_RACE_TYPE:Ženy,1

我想我浏览了所有应用程序设置,但仍然找不到解决方案。我将不胜感激任何帮助。

我不知道如何控制是否在浏览器的 URL 栏中显示 UTF-8 字符。 Chrome 例如会让我输入它们并正确显示它们,但是当它向服务器发送请求时,它 percent-encodes 它们。尝试使用 F12 开发人员工具并执行一个简单的请求,例如https://www.google.com/search?q=Ženy

所以这可能是您的浏览器在做。但是您绝对可以解决的问题是确保 P5_FILTER_CATEGORY 页面项目以正确的 UTF-8 值结束,而不是 percent-encoding。只需添加一个 "Before Header" 过程或做一些事情:

:P5_FILTER_CATEGORY := UTL_URL.UNESCAPE (:P5_FILTER_CATEGORY, 'UTF8');

另一件可能有帮助的事情,这很容易做到,就是编辑您的页面模板并确保它们在页面中设置您想要的字符集 header,例如

<html><head>
<meta charset="utf-8"/>
....

最后,您可能想要使用浏览器开发工具并检查哪个 Content-Type charset APEX 在 HTTP header 中发送。我不记得如何更改它,但如果它不是 utf-8,你可能想考虑更改它。