`
锋之轨迹
  • 浏览: 56188 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类

IE:通过 href 调用函数,参数乱码 (转)

阅读更多

示例代码

    <a href="javascript:foo('CPU%E9%A3%8E%E6%89%87')">foo1</a><br />
    <a href="javascript:foo('CPU%u98CE%u6247')">foo2</a><br />
    <a href="javascript:foo(escape('CPU风扇'))">foo3</a><br />
    <a href="javascript:foo(encodeURI('CPU风扇'))">foo4</a><br />
    <a href="#" onclick="foo('CPU%E9%A3%8E%E6%89%87')">foo5</a><br />
    <textarea rows="8" cols="50" id="txt"></textarea>

    <script type="text/javascript">
    var txt = document.getElementById('txt');
    function foo(msg,src)
    {
        txt.value = txt.value + msg + '\r\n';
    }
    </script>

运行结果

从上到下,依次点击各链接,结果如下:

IE:通过 href 调用函数,参数乱码 - CPU风扇 - CPU 藏经阁

可以看到,点击foo1后,乱码了。

问题描述

通过 href 调用函数,参数若为中文 encodeURI 编码后的字符串,IE浏览器下乱码。

问题解析

1、上述调用,浏览器会先对参数自动解码;(参数必须是 encodeURI 编码后的字符串)

2、非IE浏览器使用相应的 decodeURI 解码;(仅测试了webkit核心)

3、IE浏览器(含IE9)使用 unescape 解码;(乱码原因)

解决办法

1、使用 onclick 代替 href 调用函数;(推荐,参见示例代码的foo5)

2、参数不编码,先做为 encodeURI 的参数,再一起传递给调用函数;(参见foo4)

分享到:
评论

相关推荐

    C# 获取调用函数 参数名称和值

    总之,C#中获取调用函数的参数名称主要依赖于反射机制,通过`StackTrace`、`StackFrame`和`MethodBase`来追踪和解析调用信息。然而,获取参数值通常需要更复杂的策略,如使用AOP或对代码进行特殊处理。在实际开发中...

    C# 调用C++DLL(函数参数包含指针)

    本篇文章将深入探讨如何在C#中调用一个C++DLL,特别是当DLL函数参数中包含指针时的处理方法。 首先,理解C#与C++之间的互操作性是关键。.NET框架提供了一个名为P/Invoke(Platform Invoke)的机制,允许C#代码调用...

    JavaScript程序设计课件:函数的调用方式.pptx

    JavaScript提供了 4 种函数调用: 一般形式的函数调用 作为对象的方法调用 使用 call 和 apply 动态调用 使用 new 间接调用 5.2.2 函数的调用方式 2、函数的调用方式 一般形式的函数调用,是常见的函数调用方式,...

    QT编写DLL调用示例 方法 参数 返回值 事件回调

    QT编写DLL给外部程序调用示例 方法 参数 返回值 事件回调 : 1:C#或者 NET 第一步:引入命名空间; using System Runtime InteropServices; 第二步:声明函数 必须与实际DLL中函数名及参数一致; [DllImport &quot;qt...

    第六章Python函数习题及答案--中文

    6.10 节函数的调用:函数可以使用位置参数和关键字参数来调用。 6.11 节函数的循环输出:函数可以使用循环来输出多次结果。 6.12 节函数的循环输出:函数可以使用循环来输出多次结果,但需要注意循环的终止条件,...

    进程间函数调用

    remote-function底层使用命令管道进行通讯,内置的流程完成了函数参数和返回值的序列化过程。且大部分的参数和返回值都可以使用内置的(反)序列化方法,对于一些复杂的数据类型,需要自己(反)序列化。 项目首页...

    C++程序设计:第四讲函数.pdf

    7. 函数的参数传递和传值调用: - 形式参数(形参)是在函数定义时用的变量名,它只能是变量,不能是常量或表达式。 - 实际参数(实参)是在函数调用时提供的具体参数值,可以是常量、变量或表达式。 - 函数内部...

    C/C++ 函数调用与函数返回值

    函数参数与函数调用  1、函数调用的作用:  ·用实参数向形式参数传递数据;  ·为获得数据参数及在函数体中声明的变量分配存储空间;  ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调...

    C++ 通过字符串调用函数

    在C++编程中,通过字符串调用函数是一种高级特性,通常涉及到函数指针、元编程或者更复杂的语言机制。这个示例代码可能演示了如何在运行时根据字符串内容找到并执行相应的函数。这种技术在某些场景下非常有用,比如...

    函数调用过程种种细节分析

    函数调用是一个过程,其中一个函数通过其名称被引用并传递参数,然后控制权转移到该函数的代码。这个过程包括以下步骤: 1. 参数传递:调用函数时,参数值被压入堆栈,按照右向左的顺序(通常在C/C++中)。 2. 返回...

    常用的函数调用约定的比较

    函数调用约定(Calling Convention)在程序设计中扮演着重要的角色,它决定了函数参数如何传递、栈的清理方式以及函数名称如何进行修饰等问题。不同的调用约定对程序性能、可移植性和兼容性等方面都有着直接影响。...

    C语言函数调用栈(一) - clover_toeic - 博客园1

    1. 函数调用:在程序执行过程中,遇到函数调用语句,系统会将函数的栈帧压入栈中。 2. 局部变量初始化:系统会将函数的局部变量初始化,并存储在栈帧中。 3. 参数传递:系统会将函数的参数传递给函数,并存储在栈帧...

    qt 调用javascript函数 带参数

    例如,如果你有一个名为`myJSFunction`的JavaScript函数,可以这样调用: ```cpp QWebFrame *frame = webView-&gt;page()-&gt;mainFrame(); frame-&gt;evaluateJavaScript("myJSFunction()"); ``` 4. **传递参数** 如果...

    java调用oracle存储过程或者函数

    在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...

    函数调用.rar

    6. 嵌套函数调用:在一个函数内部调用另一个函数,可以实现更复杂的逻辑结构。 7. 高阶函数:函数作为参数传递给其他函数,或者接收函数作为返回值,这在函数式编程中很常见。 8. 函数库和模块:程序员可以将相关...

    函数的定义和调用

    在程序的其他地方,你可以通过函数名和传递实际参数来调用已定义的函数。调用格式如下: ```cpp 返回值 变量名 = 函数名(实际参数, 实际参数, ...); ``` 实际参数的值会赋给形参,然后执行函数体中的代码。例如,...

    19_函数调用模型_主调函数和被调用函数.zip_C语言

    3. 函数调用:通过函数名和括号来调用函数,括号内可以传递参数。 二、主调函数( Caller Function) 1. 主调函数是程序的入口点,通常由操作系统或运行时环境调用。在C语言中,`main()`函数是默认的主调函数,它...

    C语言程序设计:第六章 函数.ppt

    3. **函数的引用**:函数可以通过函数调用来引用,调用时需要提供实参,实参的值会传递给函数的形参。函数调用的方式有语句形式、表达式形式和作为其他函数的参数。例如: ```c int c = max(a, b); ``` 这是一个...

    深入掌握Python中的关键字参数调用函数

    在Python编程中,函数的调用可以通过多种方式实现,其中关键字参数调用是一种非常灵活且强大的方法。它允许我们在调用函数时,通过指定参数的名称来传递值,而不是仅仅依赖参数的位置。这种调用方式不仅提高了代码的...

    C#调用C++动态库,执行回调函数并传递结构体参数

    本文将详细探讨如何在C#中调用C++编写的动态链接库(DLL),执行回调函数并传递结构体参数。这涉及到.NET Framework的P/Invoke(Platform Invoke)技术以及对C++内存管理和调用约定的理解。 首先,C#调用C++动态库...

Global site tag (gtag.js) - Google Analytics