如何通過javascript向php伺服器傳送字串

來源:互聯網
上載者:User
有一個頁面,特定使用者登入後,可以在該頁面中輸入mysql查詢命令.
php伺服器接收到該命令後,直接將該命令字串傳給mysql執行,再將結果顯示在該頁面上.

剛開始在javascript中將該可編輯控制項的內容直接傳向伺服器,不行,該命令字串中的">"或者"<"等符號不正常.

後又將該字串用javascript的encodeURIComponent函數轉換後發送,在伺服器端再用php的html_entity_decode函數轉換回來,這樣子呢,我所使用的大部分命令可以了,只是命令中的引號就不正常了.

查來查去,找不到方法了,一個字串,在網路中傳送竟然太多的麻煩了.
請解惑!


回複討論(解決方案)

encodeURIComponent用它轉碼後,php直接接收即可吧!不需要再轉了吧!

將html_entity_decode()換成rawurldecode();

htmlspecialchars_decode 試試這個函數

各種轉碼函數試一遍

1、你的總是要輸入在文本控制項中的,無論是表單提交還是ajax發送,均不需要做處理
2、在用ajax發送時,如果頁面不是 utf-8 的,且發送的串中可能有中文。則應考慮在設計ajax組件時加入 encodeURIComponent 做 url 編碼,服務端需做字元集轉換
3、服務端在收到資料後,應根據 get_magic_quotes_gpc 的狀態進行去轉義操作(stripslashes)
php5.3以後 magic_quotes_gpc 開關預設關閉和取消,已不再需要這一步了
4、encodeURIComponent 是按utf-8字元集做 url 編碼處理,即無論頁面是什麼字元集的,服務端得到的都是 utf-8 的資料
5、html_entity_decode 是 htmlentities 的逆函數,與 url 編碼無關

瞭解了這些基礎知識以後,我想你應該可以繼續了

感謝各位大俠的協助!
我認真看完後,詳細作了測試.
只是我的輸入是一個可編輯的DIV,只是,在測試時,也換為文字框試過.
不作任何轉換,如果只是在輸入框輸入:select * from tablename這樣的查詢沒問題,如果是:select * from tablename where id>5,就出錯了.
在發送時加encodeURIComponent函數,伺服器用html_entity_decode後,可以select * from tablename where id>5正常出結果.
當初用這個encodeURIComponent時,只是找啊找,找到這個試了試,只是在php下卻沒有相應的解碼函數,就用的html_entity_decode試.

下面是我的測試代碼:
用戶端

測試


服務端
測試getconnect_error){printf("串連失敗:%s\n",$mysqli->connect_error);exit();}$mysqli->query("set names 'utf8'");//$sqlstr=$_POST['str'];$sqlstr=html_entity_decode($_POST['str'],ENT_COMPAT,'UTF-8');//$sqlstr=html_entity_decode($_POST['str']);echo "sqlstr=".$sqlstr."
";$res=$mysqli->query($sqlstr);if (!$res){echo $mysqli->error;exit;}$finfo=$res->fetch_fields();echo " ";foreach($finfo as $val){echo " ";}echo " ";while($row=$res->fetch_row()){echo " ";for ($i=0;$i<$res->field_count;$i++){echo " ";}echo " ";}echo "
".$val->name."
".$row[$i]."
";?>

建議直接用封裝好的jquery來實現ajax的功能需求

初學,不懂jquery.
只是,我這個程式不複雜,應該javascript沒問題吧.

初學,不懂jquery.
只是,我這個程式不複雜,應該javascript沒問題吧.

初學就直接上jquery吧...嘿嘿 研究一下 2小時就通了.

把服務端改作

運行後可看到  

鬱悶了!
同樣的代碼,我的卻是下面這個樣子:


會不會和apache及php的版本有問題,或者有什麼設定不對.
我的apache是2.2.4,
php是5.2.3

再附測試代碼:

測試


t2_1get.php:
 

如果在用戶端加上encodeURIComponent轉換,又成了這個樣子:




如果 >'5'
變成了 >\'5\'
則表示 magic_quotes_gpc 開關是開啟的,自動進行了轉義處理
所以你需要有

if(get_magic_quotes_gpc()) {  $_POST['str'] = stripslashes($_POST['str']);}

感謝xuzuning版主的協助!
可以了,感謝感謝!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.