Если у меня есть 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
Взгляните на приведенные ниже примеры, поскольку это может привести к тому, что это приведет вас к правильному направлению, если вы не найдете то, что ищете.