Intereting Posts
Doctrine не обновляет поле типа простого массива Как перебирать элементы массива для создания нескольких запросов на вставку PHP7.1 mcrypt альтернатива многократное выделение со списком Как сохранить значение переменной javascript в переменной php? Как конвертировать между часовыми поясами в PHP с использованием класса DateTime? XML-синтаксический анализ Android JSON HttpClient для отправки данных на сервер PHP с помощью HttpResponse Насколько безопасность действительно нужна на «частном» веб-сайте? Как генерировать выдержку с большинством искомых слов в PHP? Отображения несовместимы друг с другом PHP не может получить доступ к защищенной ошибке свойства Строгие стандарты PHP: только переменные должны передаваться по ссылке Как диагностировать эту сегментацию PHP-Code-Coverage и поврежденные ошибки zend_mm_heap Отчет, подготовленный PDO для обновления, не работает должным образом

Определить, является ли текст UTF-8 полностью ASCII?

Какой самый быстрый способ в PHP определить, является ли какой-то данный текст UTF-8 чисто ASCII или нет?

Возможно, более быстрая функция заключалась бы в использовании отрицательного класса символов (поскольку регулярное выражение может просто остановиться, когда оно попадает в первый символ, и нет необходимости внутренне захватывать что-либо):

function isAscii($str) { return 0 == preg_match('/[^\x00-\x7F]/', $str); } 

Без регулярного выражения (на основе моего комментария) {

 function isAscii($str) { $len = strlen($str) { for ($i = 0; $i < $len; $i++) { if (ord($str[$i]) > 127) return false; } return true; } 

Но я должен был спросить: почему вас так беспокоит быстрее? Используйте более читаемую и более понятную версию, и беспокоитесь только об оптимизации ее, когда знаете, что это проблема …

Изменить :

Тогда самым быстрым будет, вероятно, mb_check_encoding :

 function isAscii($str) { return mb_check_encoding($str, 'ASCII'); } 

Проверьте, больше ли байт, чем 0x7f, или любой символ выше U + 007F.

 function isAscii($str) { return preg_match('/^([\x00-\x7F])*$/', $str); } // doesn't accept ASCII control characters function isAsciiText($str) { return preg_match('/^([\x09\x0A\x0D\x20-\x7E])*$/', $str); }