Mezery či jiné znaky s nulovou šířkou, středník či dvojtečka s plnou šířkou a mnoho dalších znaků často vypadá stejně, jako jejich alternativy běžně používané v programovacích jazycích. V kódu níže jsou hned 2 znaky, které nejdou vidět. PHP Linter ale zahlásil chybu na řádku 31.
// Kód vypadá v pořádku, ale hlásí chybu - (31 řádek je v této ukázce řádek 10)
// Unexpected '$this' in ./app/Http/Controllers/HomeController.php on line 31
public function __construct( CategoryService $categoryService, BreadcrumbService $breadcrumbService, NewsService $newsService ) { $this->categoryService = $categoryService; $this->breadcrumbService = $breadcrumbService; // <- toto není středník $this->newsService = $newsService; // <- zero-width mezeru lze odhalit díky zvýraznění }
Zvýraznění znaků v editoru
Ať už se znak do kódu dostane jako žertík od kolegů, nebo kopírováním z externích zdrojů, hledání může být náročné. Naštěstí ale existují pluginy do editorů, které tyto znaky znázorní. Pro Sublime Text to je Highlight Dodgy Chars a pro VS Code Highlight Bad Chars nebo Highlight Dodgy Characters.
Mě se to nestane, testy a CI pipeline to odhalí
Někdo si může říct, že testy a pipeline to vždy odhalí a kód s těmito znaky se nedostane do produkce. Osobně ale můžu oponovat, protože mě se přesně tato situace stala. A kód se i přes testy dostal do produkce a způsobilo to problémy.
Jednalo se o logistický systém pro správu zásilek. Od managementu jsem dostal Excelovskou tabulku s novým zněním SMS zpráv, které se mají odesílat zákazníkům. Jednotlivé zprávy jsem zkopíroval do kódu, uložil, spustil testy a předal na release. Testy problém neodhalily, protože problém nastal až na SMS bráně operátora, který zprávy s těmito znaky odmítl přijmout. Chybu jsme hledali dlouho a až výše zmíněné pluginy pomohly tento problém odhalit.
Máte také zkušenosti s podobnými zákeřnými znaky? Podělte se v komentářích
K tomuto článku již není možné přidávat další komentáře