Dalam PHP
apa yang dimaksud dengan suatu fungsi binary-safe
?
Apa yang membuatnya istimewa dan di mana biasanya digunakan?
Ini berarti fungsi akan bekerja dengan benar ketika Anda meneruskannya ke data biner arbitrer (yaitu string yang berisi byte non-ASCII dan / atau byte nol).
Misalnya, fungsi non-biner-aman mungkin didasarkan pada fungsi C yang mengharapkan string yang dihentikan null, jadi jika string berisi karakter null, fungsi tersebut akan mengabaikan apa pun setelahnya.
Ini relevan karena PHP tidak memisahkan data string dan biner dengan rapi.
Pengguna lain sudah menyebutkan apa
binary safe
artinya secara umum.Dalam PHP, artinya lebih spesifik, hanya mengacu pada contoh yang diberikan Michael.
Semua string dalam PHP memiliki panjang yang terkait, yang merupakan jumlah byte yang menyusunnya. Ketika suatu fungsi memanipulasi string, itu bisa:
0
akan muncul.Juga benar bahwa semua variabel string PHP yang dimanipulasi oleh mesin juga diakhiri dengan null. Masalah dengan fungsi yang bergantung pada 2., adalah, jika string itu sendiri berisi byte dengan nilai
0
, fungsi yang memanipulasinya akan mengira string telah berakhir pada titik itu dan akan mengabaikan semuanya setelah itu.Misalnya, jika
strlen
fungsi PHP bekerja seperti pustaka standar Cstrlen
, hasilnya di sini akan salah:sumber
strlen()
adalah fungsi aman-biner ? Saya mengonfirmasi dari Anda karena di halaman Manual PHP untuk fungsistrlen()
tersebut tidak disebutkan apakah itu fungsi aman biner atau fungsi aman non-biner . Satu-satunya hal yang hilang dari Manual PHP ini membuat kebingungan dalam pikiran saya, jadi saya ingin memastikannya dari Anda. Saya sangat menantikan balasan Anda. Terima kasih.php -r 'var_dump("\x00\x00\x00");'
untuk memverifikasi, tetapi strlen php telah biner aman untuk waktu yang sangat lama, sejak setidaknya php 4.x (yang mengatakan, ada kekejian yang disebut "mb_overload", tetapi mari kita anggap itu tidak ada - php.net /manual/en/mbstring.overload.php )Contoh lainnya:
\x
menunjukkan notasi heksadesimal. Lihat: string PHPTabel ASCII untuk melihat daftar karakter ASCII
sumber
Hello\r\nWORLD
tidak boleh sama denganHello
jika fungsinya aman biner, bukan?strlen()
aman-biner ?