避坑!一個幽靈字元!U200b

congcong發表於2022-03-05

今天遇到一個神奇的BUG

string(4) "0​"
string(1) "0"

列印了兩個0(以0舉列,任何字串都有可能)發現長度不一致,這導致PHP陣列出現了兩個相同的key,肉眼看著是相同的,但其實計算機看不是。
我們編碼後看看

string(9) ""0\u200b""
string(3) ""0""

看見沒有,第一個後面多了\u200b。網上查了很多資料說是一個空白字元。理論上拿這個可以在遊戲中拿到重複ID。如果沒有過濾的話。

處理方法

trim($str, '\xe2\x80\x8b');
trim($str, '\xe2\x80\x8c');
trim($str, '\xe2\x80\x8d');

著急讓大家避坑,文章沒仔細梳理。

參考文章 特殊字元<200b><200c><200d>的刪除辦法與原理

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章