<script language=javascript>
function fun(param)
{
    alert(param);
    alert(decodeURIComponent(param));   //字符编码不对
    alert(unescape(param));     //未正确解码
}
</script>
<?
$value = "中'test";
echo "<script>fun('".urlencode($value)."');</script>";
?>
另:网站编码为gb2312,且不好更改啦

解决方案 »

  1.   

    javascript是以utf-8处理字符串的。
      

  2.   

    对呀,有没有办法可以简单点,难道要先转utf-8,再转为gbk,这样太麻烦了呀
      

  3.   

    // javascript 编码 
    function escape($str) {
    preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);
    $ar = $r[0];
    foreach($ar as $k=>$v) {
    if(ord($v[0]) < 128)
    $ar[$k] = rawurlencode($v);
    else
    $ar[$k] = "%u".substr(bin2hex(iconv("GBK","UCS-2",$v)),2).substr(bin2hex(iconv("GBK","UCS-2",$v)),0,2);
    }
    return join("",$ar);
    } // javascript 解码
    function unescape($str) {
    $str = rawurldecode($str);
    preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r);
    $ar = $r[0];
    foreach($ar as $k=>$v) {
    if(substr($v,0,2) == "%u")
      $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
    elseif(substr($v,0,3) == "&#x")
      $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
    elseif(substr($v,0,2) == "&#") {
      $ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
    }
    }
    return join("",$ar);
    }
      

  4.   

    php传给js根本不用encode。直接打上去就是了<script language=javascript>
    function fun(param)
    {
        alert(param);
    }
    </script>echo "<script>fun(\"".str_replace('"',"\\\"",$value)."\");</script>";
      

  5.   

    呵呵,php在服务器端就执行了.js要到客户端才执行的呀,楼上是比较方便的方法