php, html, javascript, mysql 之間的特殊字元處理

來源:互聯網
上載者:User

標籤:javascript   資料庫   程式語言   單引號   雙引號   

php, html, javascript, mysql 之間的特殊字元處理

    特殊字元指在程式中有具有特殊的控制意義的字元,一般來講各個程式語言所使用
的特殊字元大部分都來源於傳統的 C 語言,加上自身的擴充,便較為完整的滿足了編程
需求。

    程式自身的轉義處理能夠解決自身的處理需求,問題基本上都集中在程式語言之間
的不同轉移策略所帶來的匹配差異上。幾乎對所有語言來說單引號(‘)和雙引號(")
都會帶來一些麻煩。

    php 中對字元的轉義採用反斜線(\),再與資料庫進行互動時採用的函數有:
   

1 addslashes($str);

    這個函數是重建一個轉義後的字串,使用時要注意。
    如 $str = ‘""""""""‘;//這個解析沒有問題,但是輸出時就會出現問題;

1 htmlspecialchars($str);

    這個是在輸出時處理對 html 具有特殊意義的字元;

1 striptslashes($str);

    這個是在輸出時去掉轉義用的反斜線(\)
    
    Javascript 中則使用反斜線(\)對特殊字元轉義;
    查詢特殊字元無法使用(#, ?, =, &)的原因是因為該類特殊字元屬於 html 語言 url
參數傳遞(Get 方式)時用來進行參數拼接的,直接使用會導致參數傳遞紊亂,結局方法是:
前台字串參數傳遞使用 javascript 的 urlencode 內建函數進行包裹,將字串參數中的
特殊字元轉為相應的 unicode 編碼,php 取參時無需進行處理,能夠直接顯示該 unicode 
所代表的特殊字元。
    
    Php 與 Mysql 中需要特別注意對於反斜線(\)的轉義處理。反斜線是比較通用的轉義
    符號,要匹配字串中的反斜線字元(‘\‘),原則上來說只需要使用 2 個反斜線(\\)
    就可以了,但是 php 與 mysql 中在進行反斜線匹配時卻需要 3 或 4 個反斜線(\\\\)
    來匹配 1 個字串中的反斜線(\)。如為了將字串中的 1 個反斜線替換為 4 個反斜
    杠(\\\\)以使 sql 語句能夠匹配資料庫中的具有 1 個反斜線(\) 的欄位的記錄,需要
    使用以下的轉換:  

  = ("/\\\\/", "\\\\\\\\\\\\\\\\", );  = ("/‘/", "‘‘", );  = ("/_/", "‘_", );  = ("/%/", "‘%", );

    這樣資料庫中的匹配才是合理的。使用之後,為了將 $str 回顯,要做相應的逆向處理: 

   = ("/\\\\\\\\\\\\\\\\/", "\\\\", );   = ("/‘‘/", "‘", );   = ("/‘_/", "_", );   = ("/‘%/", "%", );   = ();

    這樣便滿足了特殊字元的查詢處理需求。
    sql 中的特殊字元有底線(_), 百分比符號(%),和單引號(‘);

1) php (\) 轉義符問題

  sql 中有特殊含義:表示換行
  需要轉為 \\\ (3個) 進行匹配;
  寫成三個‘\‘的原因是反斜線符號會被文法剖析器剝離一次,在進行模式比對時,
  又會被剝離一次,最後會剩下一個反斜線符號接受匹配
  如:
  資料庫中有資料如下:

1 "*_.%‘"[email protected]
2 "*_.%‘"[email protected]\‘
3 "*_.%‘"[email protected]\\
4 "*_.%‘"[email protected]\\\
5 "*_.%‘"[email protected]\\\\
1     搜尋    "*_.%‘"[email protected]       會匹配 "*_.%‘"[email protected];
2     搜尋    "*_.\%‘"[email protected]      會匹配 "*_.%‘"[email protected];
1     搜尋    "*_.%‘"[email protected]\      sql 會報語法錯誤
2     搜尋    "*_.\%‘"[email protected]\     sql 會報語法錯誤
1     搜尋    "*_.%‘"[email protected]\\     匹配 0 行   
2     搜尋    "*_.\%‘"[email protected]\\    匹配 0 行
1     搜尋    "*_.%‘"[email protected]\\\%   匹配結果如下:
2     "*_.%‘"[email protected]\‘
3     "*_.%‘"[email protected]\\                                            
4     "*_.%‘"[email protected]\\\                                                
5     "*_.%‘"[email protected]\\\\
1     搜尋    "*_.%‘"[email protected]\\\\%   匹配結果如下:
2     "*_.%‘"[email protected]\‘
3     "*_.%‘"[email protected]\\                                      
4     "*_.%‘"[email protected]\\\                                                  
5     "*_.%‘"[email protected]\\\\
1     搜尋    "*_.\%‘"[email protected]\\\\\  匹配 0 行
2     搜尋    "*_.\%‘"[email protected]\\\\\\ 匹配 0 行
3     搜尋    "*_.\%‘"[email protected]\\\\\\\ 匹配 1 行
4     搜尋    "*_.\%‘"[email protected]\\\\\\\\ 匹配 1 行

  總結:
      反斜線做查詢時要變 1 個為 4 個,這樣總能得到正確的結果。

  另:  

1 $senameEnter = preg_replace("/\\\/", "\\\\\\\\\\\\\\\\", $senameEnter);

    這句代碼將 $senameEnter 中的一個反斜線(\)替換為四個反斜線(\\\\),以匹配
    sql 中查詢一個反斜線(\)需要用四個反斜線(\\\\)去匹配。
    為了統一替換的數值可以設為使用四個反斜線(\\\\)替換一個,如下面代碼:

1     $senameEnter = preg_replace("/\\\\/", "\\\\\\\\\\\\\\\\", $senameEnter);

    php Regex中反斜線(\)是用來進行特殊字元轉義的,匹配反斜線原則上只要
    使用兩個反斜線(\\),但是實際使用時卻需要三個反斜線(\\\)進行匹配。php 字元
    串中需要由四個反斜線(\\\\)來表示一個反斜線的替代。詳細的原因比較複雜,需要    
    根據程式設計的內部機制進行解釋。      

  2) & 符號問題
    
    & 符號的問題原因是:在url傳遞參數時這個符號代表了傳遞字元的串連符。
    同樣存在問題的還有等號(=)和問號(?)。
    解決方案:
        js 拼湊URL時先對這三個符號進行處理,傳遞之後再進行逆向處理。
    如果編碼是將其編碼為相應的unicode碼,後台無需在特別處理。     

1 url = url.replace(/\?/g,"%3F").replace(/&/g,"%26").replace(/=/g,"%3D");

    使用 jquery 取出來的字串如果包含 ‘&‘ 符號,javascript 會將其妝化為相應的等式實體 &
    回顯需要進行特別處理(無內建函數):  

1 sename = $(obj).html().replace(/&/g, ‘&‘);


php, html, javascript, mysql 之間的特殊字元處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.