对从JS到Drupal的字符串进行编码的URL
URL encoding a string from JS to Drupal
Web 应用程序;Ajax 函数有时需要将字符串作为参数传递给 Drupal 函数
$.ajax({url: "index.php?q=get_value/"+encodeURIComponent(value),
当值包含斜杠时,它不会从 Drupal 函数中识别出来,如下所示
function get_value($value) {
print urldecode($value);
例如,如果传递的字符串是 ABC/123 ,则get_value仅打印 ABC
如何解决这个问题,传递斜杠并从 PHP/Drupal 获取整个字符串?
使用 %2f
而不是 /
$.ajax({url: "index.php?q=get_value" + "%2f" + encodeURIComponent(value),
[参考],见第2.2节
或者,一个更具可读性的替代方案:
$.ajax({url: "index.php?q=" + encodeURIComponent("get_value/"+value),
您的问题是Drupal将斜杠解释为路径分隔符,因此它将get_value$value/val1/val2/val3中的第一个参数提取...你可以让Drupal拆分参数,但你需要重新组合它们。下面是 Drupal7 的一个例子。
在你的菜单系统中,你必须确保drupal将使用所有参数回调你的get_value函数:
function mymodule_menu {
$items['get_value'] = array(
'page callback' => 'mymodule_get_value',
);
return $items;
}
然后重新组合参数的动态数量:
function mymodule_get_value() {
$args = func_get_args();
$value = implode('/', $args);
// do what you need with $value here
}
希望这有帮助!
也许我在这里错过了一些东西,但你不能连接你的查询字符串并将其传递给ajax
函数吗?也许你可以使用 parse_url((。
您的get_value()
可能有问题。来自 PHP 的 urdecode(( 手册:"超全局 $_GET 和 $_REQUEST 已经被解码了。在 $_GET 或 $_REQUEST 中的元素上使用 urldecode(( 可能会产生意想不到的危险结果。
如果这是您的确切代码,那么您有一个语法错误(额外的引号(,第一行应该是:
$.ajax({url: "index.php?q=get_value/" + encodeURIComponent(value),
你能提供更多关于PHP函数在哪里的细节吗 - 它在Drupal自定义模块中吗?如果它位于自定义模块中,您是否对get_value路径使用 menu_hook?另外,您使用的是哪个版本的Drupal?另一件事是,您可以将encodeURIComponent替换为Drupal.encodeURIComponent(Drupal 6(或Drupal.encodePath(Drupal 7(。
首先,了解路由系统在做什么会很有帮助,调试时会看到什么?
function get_value($value) {
var_dump($value);
print urldecode($value);
您可以尝试的另一种选择是传递带有双引号的变量,以便将它们解释为字符串。
$.ajax({url: "index.php?q=get_value/'"" + encodeURIComponent(value) + "'"",
在 URL 解码之前,您应该检查 PHP 函数的 $value 参数是否具有斜杠后面的部分。
解决此问题的一种方法是在编码之前替换字符串中的斜杠,然后在 PHP 中解码后替换它们。下面是一个将斜杠替换为回车符的示例:(您应该使用在字符串中找不到的字符(
$.ajax({url: "index.php?q=get_value/"+encodeURIComponent(value.replace("/", "'r")),
而PHP代码来扭转这种情况:
function get_value($value) {
print str_replace("'r", "/", urldecode($value));
您可能需要尝试其他一些字符(您也可以使用字符序列而不是单个字符(,看看哪些字符有效。去除 URL 编码斜杠的逻辑也可能去除其他字符。
- 为什么字符编码对URL很重要
- 如何在JS中编码URL并在PHP中解码
- 编码url并显示在iframe中
- 如何避免在HTML中使用ng repeat对url名称进行硬编码
- 对URL进行编码并将其放在javascript src中
- 将谷歌地理编码(从url)数据加载到javascript变量中
- 使用特殊字符 Javascript 对 URL 进行编码
- 使用 POST 方法通过 ajax 发送的数据在发送到服务器之前是否必须进行 URL 编码
- 如何停止ui-sref编码url参数
- 如何编码url从ajax返回数据,然后追加到html
- firefox如何在地址栏中编码url
- 如何使用javascript从编码url获取查询字符串的值
- 编码url,但继续工作
- 使用jquery或原生javascript函数编码URL(包括&等字符)
- PHP在PHP中设置全局常量中的硬编码URL
- 用javascript编码url,用PHP解码
- 由于HTML编码,硬编码URL无效
- 通过webpack更改不同环境的硬编码url常量
- 在Javascript和PHP中编码URL的函数相同
- 如何编码url以便在$resource中获得请求