Как обнаружить не-ASCII-символы в строке?

Если у меня есть PHP-строка, как я могу определить, содержит ли она хотя бы один символ не ASCII или нет, эффективным способом? И с помощью символа, отличного от ASCII, я имею в виду любой символ, который не является частью этой таблицы, http://www.asciitable.com/ , позиции 32 – 126 включительно.

Таким образом, он не только должен быть частью таблицы ASCII, но также должен быть доступен для печати. Я хочу обнаружить строку, содержащую по крайней мере один символ, который не соответствует этим спецификациям (либо непечатаемый ASCII, либо совсем другой символ, например символ Unicode, который не является частью этой таблицы.

Я счел более полезным определить, выпадет ли какой-либо символ из списка

 if(preg_match('/[^\x20-\x7f]/', $string)) 

Вы можете использовать mb_detect_encoding и проверить ASCII:

 mb_detect_encoding($str, 'ASCII', true) 

Это вернет false, если $str содержит хотя бы один символ не ASCI (значение байта> 0x7F).

Функция ctype_print возвращает true, если все символы попадают в диапазон ASCII 32-126 ( PHP unit test ).

Вы можете использовать:

mb_detect_encoding

но это может быть не так точно, как вы хотите.

Попробуйте ( mb_detect_encoding )

Попробуйте: ( Источник )

 function is_ascii( $string = '' ) { return ( bool ) ! preg_match( '/[\\x80-\\xff]+/' , $string ); } 

Хотя все приведенные выше ответы верны, но в зависимости от ввода эти решения могут давать неправильные ответы. См. Последний раздел этой публикации ASCII .

Если вы не хотите иметь дело с Regex в javascript, вы можете сделать

 detectUf8 : function(s) { var utf8=s.split('').filter(function(C) { return C.charCodeAt(0)>127; }) return (utf8.join('').length>0); }, 

Я предлагаю вам ознакомиться с utf8_encode или utf8_decode в руководстве PHP:

http://www.php.net/manual/en/function.utf8-encode.php

Взгляните на приведенные ниже примеры, поскольку это может привести к тому, что это приведет вас к правильному направлению, если вы не найдете то, что ищете.