回答
這意味着當傳遞給它(包含非ASCII字節和/或空字節即字符串)任意的二進制數據的功能將正常工作。
例如,非二進制安全功能可能基於一個C函數,預計空值終止字符串,因此如果字符串包含一個空字符,該函數將忽略之後任何事情。
這是相關的,因爲PHP不會乾淨地分離字符串和二進制數據。
其他用戶已經提到一般是指什麼binary safe
。
在PHP中,其含義更具體,僅指邁克爾給出的例子。
在PHP所有串具有相關聯的長度,其是構成它的字節數。當一個函數處理一個字符串時,它可以:
- 依靠那個長度的元數據。
- 依靠字符爲空終止,即,實際上是字符串的部分中的數據之後,隨着值
0
一個字節將出現。
也是事實,由引擎操縱的所有字符串PHP變量也是空終止的。依賴於2的函數的問題是,如果字符串本身包含一個值爲0
的字節,則操作它的函數會認爲該字符串在該點處結束,並且在此之後將忽略所有內容。
舉例來說,如果PHP的strlen
功能的工作就像C標準庫strlen
,這裏的結果將是錯誤的:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
更多的例子:
<?php
$string1 = "Hello";
$string2 = "Hello\x00World";
// This function is NOT ! binary safe
echo strcoll($string1, $string2); // gives 0, strings are equal.
// This function is binary safe
echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2.
?>
\x
表示十六進制。請參閱:PHP strings
0x00 = NULL
0x04 = EOT (End of transmission)
ASCII table看到的ASCII字符列表
最好解釋。 – 2013-12-14 10:23:08
爲了確保我能理解,如果函數是二進制安全的,那麼'Hello \ r \ nWORLD'不應該與'Hello'相同,對吧? – 2014-07-09 02:28:11
另外,這個功能是如何實現的?有沒有一個正則表達式來檢查它的二進制安全還是使用了不同的方法? – 2014-07-09 03:06:57
- 1. 函數($)是什麼意思?
- 2. 線程安全是什麼意思?
- 3. 線程安全是什麼意思?
- 4. 彈簧安全鉤是什麼意思?
- 5. 什麼意思?=在PHP中的意思?
- 6. date函數中的第二個參數是什麼意思?
- 7. 編譯後的二進制文件是什麼意思?
- 8. 是什麼意思:是什麼意思?
- 9. 這個二進制文檔是什麼意思?
- 10. 什麼意思在PHP中?
- 11. 在聲明全局模板函數時,「static」是什麼意思?
- 12. PHP這是什麼意思?
- 13. PHP是什麼意思?
- 14. PHP/MySQL - 什麼是||意思?
- 15. =>在php中是什麼意思?
- 16. 在php中「| =」是什麼意思?
- 17. 在PHP中「?:」是什麼意思?
- 18. 「:」在PHP中是什麼意思?
- 19. 在PHP中,$ var [] []是什麼意思?
- 20. 在php中是什麼意思?
- 21. 在php中if(false)是什麼意思?
- 22. @在php中是什麼意思?
- 23. 在PHP中,ClassName :: class是什麼意思?
- 24. 在PHP中'<= ='是什麼意思?
- 25. 在Python中「導入安全」是什麼意思?
- 26. 在iOS中線程安全是什麼意思?
- 27. 隨機數的安全強度是什麼意思?
- 28. '無效的操作數到二進制==(有'數量'和'INT')'是什麼意思?
- 29. 是什麼意思,在Python中是什麼意思?
- 30. :: at函數名是什麼意思?
這是否意味着二進制字符串安全只包含長度爲1個字節的「角色」? – 2014-07-09 03:25:36
@CharlieParker:不,你明白了。二進制安全性是* functions *的一個屬性,這意味着它們可以正確處理任意*字符串。反過來是一個只包含ASCII字符*和*無空字符的字符串 - 這樣的字符串應該被任何函數正確處理。 – 2014-07-09 06:36:01
也許我很困惑,因爲我正在閱讀redis協議中的「批量字符串」,並表示它們代表了「單個二進制安全字符串」。我想我現在正確理解你的帖子。然而,說一個字符串是「二進制安全的」(如我提供的例子)是否有意義? – 2014-07-09 16:05:59