如何 URL 正确编码页面项目 - APEX 21.1
How to URL Encode Page Item Correctly - APEX 21.1
我在表单上有一个 RESET_PSWD
按钮,它调用定义了 4 个真实动作的动态动作。
Confirm
动作
Execute Server-side Code
- PL/SQL 生成新临时密码的程序
Execute Server-side Code
- PL/SQL 使用 APEX_PAGE.GET_URL
生成模态 url 的程序
Execute JavaScript Code
- 使用第 3 步中的 url 打开模式
DA 的目标是生成一个临时密码,为模态构建一个 URL(从第 2 步传入新的临时密码),然后导航到模态。在 Step 2
和 Step 3
之间,P7_TEMP_PSWD
中的值由于特殊字符在请求调用之间没有被正确 url 编码而被截断。
-- package procedure to get & set url for confirmation modal (Step 3)
PROCEDURE get_feedback_url (
p_username VARCHAR2,
p_temp_pswd VARCHAR2
) IS
vcPswdEncoded VARCHAR2(1000);
vcURL VARCHAR2(1000);
vcValueList VARCHAR2(1000);
BEGIN
vcPswdEncoded := APEX_UTIL.URL_ENCODE(p_temp_pswd);
vcValueList := p_username ||','|| vcPswdEncoded;
vcURL := APEX_PAGE.GET_URL(p_page => '12',
p_items => 'P12_USERNAME,P12_TEMP_PSWD',
p_values => vcValueList,
p_plain_url => TRUE);
APEX_UTIL.SET_SESSION_STATE('P7_FEEDBACK_URL', vcURL);
EXCEPTION
WHEN OTHERS THEN
csa.rsn_logger.log_error(p_rsn_app => 'RSNUM',
p_app_loc => 'rsnum_user.get_feedback_url',
p_log_msg => SQLERRM);
END;
我正在尝试 url 在构建 url 之前对临时 pswd 进行编码,但我得到以下结果:
使用 APEX_UTIL.ENCODE_URL
后的值是我想要的,但似乎 APEX_PAGE.GET_URL
也在对值进行编码,因此再次对“%”进行编码。有没有办法选择退出 GET_URL
这样做?我首先使用 ENCODE_URL
的原因是因为 APEX 默认情况下没有对“#”(和其他一些字符)进行编码,这最初给我带来了问题。
希望有更好的方法来做到这一点,但想出了一个可行的解决方案(需要测试边缘情况,但似乎可行)。我使用以下表达式在模态页面上创建了一个 Before Header 计算:
UTL_URL.UNESCAPE(:P12_TEMP_PSWD)
我在表单上有一个 RESET_PSWD
按钮,它调用定义了 4 个真实动作的动态动作。
Confirm
动作Execute Server-side Code
- PL/SQL 生成新临时密码的程序Execute Server-side Code
- PL/SQL 使用APEX_PAGE.GET_URL
生成模态 url 的程序
Execute JavaScript Code
- 使用第 3 步中的 url 打开模式
DA 的目标是生成一个临时密码,为模态构建一个 URL(从第 2 步传入新的临时密码),然后导航到模态。在 Step 2
和 Step 3
之间,P7_TEMP_PSWD
中的值由于特殊字符在请求调用之间没有被正确 url 编码而被截断。
-- package procedure to get & set url for confirmation modal (Step 3)
PROCEDURE get_feedback_url (
p_username VARCHAR2,
p_temp_pswd VARCHAR2
) IS
vcPswdEncoded VARCHAR2(1000);
vcURL VARCHAR2(1000);
vcValueList VARCHAR2(1000);
BEGIN
vcPswdEncoded := APEX_UTIL.URL_ENCODE(p_temp_pswd);
vcValueList := p_username ||','|| vcPswdEncoded;
vcURL := APEX_PAGE.GET_URL(p_page => '12',
p_items => 'P12_USERNAME,P12_TEMP_PSWD',
p_values => vcValueList,
p_plain_url => TRUE);
APEX_UTIL.SET_SESSION_STATE('P7_FEEDBACK_URL', vcURL);
EXCEPTION
WHEN OTHERS THEN
csa.rsn_logger.log_error(p_rsn_app => 'RSNUM',
p_app_loc => 'rsnum_user.get_feedback_url',
p_log_msg => SQLERRM);
END;
我正在尝试 url 在构建 url 之前对临时 pswd 进行编码,但我得到以下结果:
使用 APEX_UTIL.ENCODE_URL
后的值是我想要的,但似乎 APEX_PAGE.GET_URL
也在对值进行编码,因此再次对“%”进行编码。有没有办法选择退出 GET_URL
这样做?我首先使用 ENCODE_URL
的原因是因为 APEX 默认情况下没有对“#”(和其他一些字符)进行编码,这最初给我带来了问题。
希望有更好的方法来做到这一点,但想出了一个可行的解决方案(需要测试边缘情况,但似乎可行)。我使用以下表达式在模态页面上创建了一个 Before Header 计算:
UTL_URL.UNESCAPE(:P12_TEMP_PSWD)