oracle-apex - 如何正确对页面项目进行 URL 编码 - APEX 21.1
问题描述
我RESET_PSWD
在表单上有一个按钮,它调用定义了 4 个真实动作的动态动作。
Confirm
行动Execute Server-side Code
- PL/SQL 过程来生成新的临时 pswdExecute Server-side Code
- PL/SQL 程序使用生成模式 urlAPEX_PAGE.GET_URL
Execute JavaScript Code
- 使用步骤 3 中的 url 打开模式
DA 的目标是生成一个临时密码,建立一个指向模态的 URL(从第 2 步传入新的临时密码),然后导航到模态。由于请求调用之间的特殊字符未正确编码,BetweenStep 2
和Step 3
in 的值被截断。P7_TEMP_PSWD
-- 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 之前对 temp pswd 进行 url 编码,但我得到以下结果:
使用后的值APEX_UTIL.ENCODE_URL
是我想要的,但似乎APEX_PAGE.GET_URL
也在对值进行编码,所以 '%' 再次被编码。有没有办法选择不GET_URL
这样做?我ENCODE_URL
首先使用的原因是因为 APEX 默认情况下没有编码“#”(和一些其他字符),这最初是给我造成的问题。
解决方案
希望有更好的方法来做到这一点,但想出了一个可行的解决方案(需要测试边缘情况,但似乎可行)。我使用以下表达式在模态页面上创建了一个 Before Header 计算:
UTL_URL.UNESCAPE(:P12_TEMP_PSWD)
推荐阅读
- python - 获取“httpStatus 400 - 错误请求:授权标头值的预期承载前缀”时如何修复 GET API 调用?
- javascript - AJAX 电子邮件值在 safari 中读取未定义但在 chrome 中完美运行
- mysql - 如何获取 MySql Server 的 IP 供其他设备使用
- angular - 防止 AOT 从编译中排除组件
- regex - 正则表达式删除两个 + 符号后的 8 个字符哈希
- typescript - TypeScript:从装饰器而不是描述符获取类
- objective-c - 没有在 OCMStub/OCMExpect/OCMReject 中记录调用
- android-jetpack-compose - Jetpack Compose Text 组件中的等宽数字
- php - 从 PHP 7.4 / Ubuntu 20 连接 SQL Server
- html - 如何分割背景使用线性渐变从左到右变成 3 种纯色?