но остается вопрос удобной навигации по дереву проектов
<?php
// PHP файл в кодировке UTF-8
$text = iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-8"); // Выведет "UTF-8"
// Указание различных вариантов UTF-16 также не помогает
$text = iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-16BE,UTF-16,UTF-8"); // Выведет "UTF-8"
// Не сработает, даже если вручную добавить BOM
$text = "\xFF\xFE" . iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-8"); // Выведет пустую строку
// Указание различных вариантов UTF-16 при наличии BOM также не помогает
$text = "\xFF\xFE" . iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-16BE,UTF-16,UTF-8"); // Выведет пустую строку
<?php
// PHP файл в кодировке UTF-8
$text = iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-8"); // Выведет "UTF-8"
// Указание различных вариантов UTF-16 также не помогает
$text = iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-16BE,UTF-16,UTF-8"); // Выведет "UTF-8"
// Не сработает, даже если вручную добавить BOM
$text = iconv("UTF-8", "\xFF\xFEUTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-8"); // Выведет "UTF-8"
// Указание различных вариантов UTF-16 при наличии BOM также не помогает
$text = iconv("UTF-8", "\xFF\xFEUTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-16BE,UTF-16,UTF-8"); // Выведет "UTF-8"
<?php
// PHP файл в кодировке UTF-8
$text = iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding(iconv("UTF-8", "UTF-16LE", 'ффф'), "UTF-16LE,UTF-8"); // Выведет "UTF-8"
// Указание различных вариантов UTF-16 также не помогает
$text = iconv("UTF-8", "UTF-16LE", 'ффф');
print mb_detect_encoding(iconv("UTF-8", "UTF-16LE", 'ффф'), "UTF-16LE,UTF-16BE,UTF-16,UTF-8"); // Выведет "UTF-8"
// Не сработает, даже если вручную добавить BOM
$text = iconv("UTF-8", "\xFF\xFEUTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-8"); // Выведет "UTF-8"
// Указание различных вариантов UTF-16 при наличии BOM также не помогает
$text = iconv("UTF-8", "\xFF\xFEUTF-16LE", 'ффф');
print mb_detect_encoding($text, "UTF-16LE,UTF-16BE,UTF-16,UTF-8"); // Выведет "UTF-8"
<?xml version="1.0" encoding="UTF-8" ?>
"). Ага, теперь разобрался — этот диапазон минимально безопасный, но вообще рекомендуется еще отбрасывать, например, #x007F-#x0084 и т. п.
$text = preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+|[\x{007F}-\x{0084}\x{0086}-\x{009F}\x{FDD0}-\x{FDEF}]+/u', '', $text);
Что до #x10000 и прочих кодов, которые выходят за пределы двух байтов, то тут зависит от реализации Юникода — не в каждой программе Юникод четырехбайтовый.
В моем случае, например, он двухбайтовый, тут (UTF-16) тоже, так что таких символов просто не встретится.