PHP'nin mbstring.func_overload üzerinde olan dizeleri bayt bulma

1 Cevap php

Ben PHP mbstring.func_overload = 7 ile yapılandırılmış, bu nedenle tüm tek-bayt-string fonksiyonları kendi multi-byte eşdeğerleri eşleştirilir. Ama hala bazen bayt dizileri olarak dizeleri tedavi etmek gerekir; Örneğin, onların boyutunu hesaplama veya şifreleme yaparken.

Burada en iyi yaklaşım nedir? Ben sadece bu dize nasıl kodlandığını aslında değil olsa bile, çoklu-bayt işlevleri kullanmak ve onlara bir tek-bayt kodlamayı geçebilir? Örneğin:

mb_substr($utf8str, 0, 1, "latin1");
mb_strlen($utf8str, "latin1");

Onlar mb_orig_strlen gibi, mb_orig_X için özgün işlevleri yeniden adlandırın PHP'nin kaynak aracılığıyla ararken EDIT: fark ettim. Onlar belgelenmiş, ama ilginç değil muhtemelen güvenli değil, kullanmak için.

1 Cevap

Ben orijinal olanları (Eğer gerçekten ikili dizelerde çalıştırmak gerekiyorsa yani), oldukça kirli bir çözüm kullanmanız gerekir eğer bu işlevleri geçersiz gerektiğini düşünüyorum. Bu size daha önce yapılan bu seçim için daha kirli geçici çözüm yapmak için zorlar. Ve muhtemelen siz farkında olmadan kullanıyorsunuz (ancak PHP ekibi böyle daha aptal özellikler icat tutar) kütüphaneleri keser.

Eğer must bu şekilde tutmak Ama eğer, yapmanız gerekenler:

  1. (. - Bu 2 sene içinde olmasa bile tercüman, ancak kodunuzu okuyanlar için) ve dil-nötr encoding gibi ASCII kullanın
  2. Iyice bunu neden yaptığını herkes kod parçası bakarak için çok kafa karıştırıcı olacağından, belgelemek.