Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

mb_detect_encoding($str, 'ASCII', true)

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

Ответ 3

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

Ответ 4

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

mb_detect_encoding

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

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

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

Посмотрите на приведенные ниже примеры, поскольку у него может быть что-то, что приведет вас в правильное направление, если вы не найдете то, что ищете.