Как обнаружить не-ASCII символы в строке? - PullRequest
30 голосов
/ 27 июня 2011

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

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

Ответы [ 8 ]

58 голосов
/ 27 июня 2011

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

if(preg_match('/[^\x20-\x7f]/', $string))
33 голосов
/ 27 июня 2011

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

mb_detect_encoding($str, 'ASCII', true)

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

3 голосов
/ 27 июня 2011

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

2 голосов
/ 31 декабря 2013

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

2 голосов
/ 01 апреля 2013

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

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

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

2 голосов
/ 27 июня 2011

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

mb_detect_encoding

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

0 голосов
/ 03 апреля 2016

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

detectUf8 : function(s) {
  var utf8=s.split('').filter(function(C) {
    return C.charCodeAt(0)>127;
  })
  return (utf8.join('').length>0);
},
0 голосов
/ 27 июня 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...