私は PHP をあまり使ったことがありません。質問するためにこのフォーラムに来ました。
ここで発生する問題は、ユーザーがログインするためにユーザー名とパスワードを入力することです。パスワードが単純であれば、渡すことができます。しかし、パスワードが ab@;&1 の場合、サーバーによって取得されたパスワード値が切り取られ、ab@; になることがわかります。ただし、コードの次の部分もこの方法で動作しますが、2 つの場所の違いがわかりません。
クライアント部分の PHP
function getFirstU8Accid(){ var sUserName = document.getElementById("user_name").value.toLowerCase(); var sPassword = document.getElementById("password").value; sUserName = escape(sUserName); if(sUserName=="") { return(""); } var sUrl = '/Server/a.php?t='+escape(Date())+'&a='+sUserName+'&b='+sPassword; var xml = CreateXMLHttp(); xml.open("GET",sUrl,false); xml.send(); var sLoginUser = xml.responseText; //处理.......} //具体调用处如下代码所示 //此处调用getFirstU8Accid()失败,具体错误是服务端的PHP并没有得到完整的密码内容。 Accid = getFirstU8Accid(); try{var guid = obj.GetClientGUID();}catch(e){return " Error:failed to call GetClientGUID,error message:" + e.message;} var sUrl = '/Server/b.php?t='+escape(Date())+'&a='+user+'&b='+password+'&c='+sDomain; var xml = CreateXMLHttp(); xml.open("GET",sUrl,false); xml.send(null); //此处能正常返回,因为b.php中的代码能正常获取到密码内容 return xml.responseText;[/color]a.php b.php中的代码大概如下,其实基本一样,只是b中参数多了,多了一个解析的。[code=php]<?php $langs=$_COOKIE['LANGUAGES'];$langs=empty($langs) ? 'cn' : $langs;$language=include"lang-$langs.php";require("CmxConsts.php");require("CmxCommon.php");try { $sUserName = $_GET["a"]; $sUserName = str_replace("|YJ|","&",$sUserName); $sUserName = str_replace("|YJJ|","#",$sUserName); //下面获取的密码就被裁剪了。 $sPassword = $_GET["b"]; //...................?>
値にこの文字が含まれる場合、& 文字がフィールド区切り文字として表示されます。URL エンコード (%26) を行う必要があります。
バージョン マスター。はとても速いのですが、2回目に提出したときは処理されなかったようです。
また、URLエンコード処理用のユニバーサルコードはありますか?私はトリリンガル (中国語、英語、繁体字) ですが、影響を受けますか? PHP に詳しくありません。使用したばかりですが、関連する情報や例はありますか?
js には encodeURI メソッドと encodeURIComponent メソッドはありませんか?
問題は解決しました。最初の処理では、パスワードに対するエスケープ操作は行われませんが、受信側でアンエスケープ処理が実行されます。そして2位はペアです。バージョンのヒントをありがとう。
var sUrl = '/Server/a.php?t='+escape(Date())+'&a='+sUserName+'&b='+sPassword;
var sUrl = '/Server/ a.php?t='+escape(Date())+'&a='+encodeURIComponent(sUserName)+'&b='+encodeURIComponent(sPassword);