Php строка недопустимые символы

Как обнаружить неверную строку utf-8 в PHP?

Есть ли способ обнаружить, что в строке utf-8 есть недопустимые символы, прежде чем помещать данные в inconv?

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

Вы можете использовать проверку достоверности UTF-8, которая доступна в preg_match [PHP Manual] с PHP 4.3.5. Он вернет 0 (без дополнительной информации), если указана недопустимая строка:

$isUTF8 = preg_match('//u', $string); 

Другая возможность – mb_check_encoding [Руководство PHP] :

$validUTF8 = mb_check_encoding($string, 'UTF-8'); 

Другой функцией, которую вы можете использовать, является mb_detect_encoding [Руководство PHP] :

$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true)); 

Важно установить strict параметр в значение true .

Кроме того, iconv [Руководство PHP] позволяет вам изменять / отменять недействительные последовательности «на лету». (Однако, если iconv обнаруживает такую ​​последовательность, он генерирует уведомление, это поведение не может быть изменено.)

echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL; echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL; 

Вы можете использовать @ и проверить длину возвращаемой строки:

strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string)); 

Проверьте примеры на странице руководства iconv .

Вы не поделились исходным кодом, из которого возникает уведомление. Вы должны добавить его, если хотите более конкретное предложение.

Вы можете попробовать использовать mb_detect_encoding чтобы определить, есть ли у вас другой набор символов (чем UTF-8), а затем mb_convert_encoding для преобразования в UTF-8, если это необходимо. Скорее всего, люди дают вам действительный контент в другом наборе символов, чем предоставление недопустимого UTF-8.

Спецификация символов, недопустимых в UTF-8, довольно ясна. Вы, вероятно, захотите снять их, прежде чем пытаться его разобрать. Их не должно быть так, чтобы вы могли избежать этого даже до создания XML, который был бы еще лучше.

Читайте также:  Do while function in python

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

Однако iconv может иметь встроенную поддержку для этого:

поставьте @ перед iconv (), чтобы подавить NOTICE и // IGNORE после UTF-8 в исходном коде, чтобы игнорировать недопустимые символы:

@iconv( 'UTF-8//IGNORE', $destinationEncoding, $yourString ); 

Источник

Проверка строки для недопустимых символов с использованием регулярного выражения

Я хочу проверить a для любого незаконного символа, используя следующее регулярное выражение в PHP. По сути, я хочу разрешить только буквенно-цифровое и подчеркивание (_). К сожалению, следующий фрагмент кода, похоже, не работает должным образом. Он должен возвращать true, если в строке $ username есть какой-либо незаконный символ. Тем не менее, он по-прежнему позволяет использовать любой символ в строке. Любая идея, что не так с регулярным выражением?

if ( !preg_match("/^[-a-z0-9_]/i", $username) )

Ваш код проверяет, не является ли первый символ недопустимым. Чтобы проверить, существуют ли какие-либо недопустимые символы, сверните свой класс символов, а не возвращайте функцию и удалите привязку:

if ( preg_match("/[^-a-z0-9_]/i", $username) )

Разумеется, вы могли бы также сократить его до /[^-\w]/ («слова» – буквы, цифры и подчеркивание), или даже просто /\W/ если вы не хотите разрешать тире.

Если $username имеет только буквенно-цифровой символ и подчеркивание, он вернет TRUE

if (preg_match("/^[a-z0-9_]+$/i", $username) )

Ваше выражение соответствует только 1 символу. Попробуйте / ^ [- a-z0-9 _] + $ / i «+» соответствует более 1 символу, а «$» – конец строки.

Вам нужно также привязать его в конце, а не просто проверять первый символ. Попробуйте «/^[-a-z0-9_]*$/i» вместо этого.

У вас нет ретранслятора для одного. Вам нужен ретранслятор, такой как +. Насколько я могу видеть, не выполняя его, вы проверяете начало строки и один символ, соответствующий a-zA-Z0-9 и _, но ничего не следуя за первым символом.

Источник

Как обнаружить неверную строку utf-8 в PHP?

Есть ли способ обнаружить, что в строке utf-8 есть недопустимые символы, прежде чем помещать данные в inconv?

Читайте также:  Html in one line online

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

Вы можете использовать проверку действительности UTF-8, которая доступна в preg_match [Руководство PHP] с PHP 4.3.5. Он вернет 0 (без дополнительной информации), если указана недопустимая строка:

$isUTF8 = preg_match('//u', $string); 
$validUTF8 = mb_check_encoding($string, 'UTF-8'); 
$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true)); 

Важно установить параметр strict на true .

Кроме того, iconv [Руководство PHP] позволяет вам изменять/отбрасывать недопустимые последовательности на летать. (Однако, если iconv встречает такую ​​последовательность, она генерирует уведомление, это поведение не может быть изменено.)

echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL; echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL; 

Вы можете использовать @ и проверить длину возвращаемой строки:

strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string)); 

Проверьте примеры на странице руководства iconv .

Вы не поделились исходным кодом, из которого возникает уведомление. Вы должны добавить его, если хотите более конкретное предложение.

Спецификация символов, недопустимых в UTF-8, довольно ясна. Вы, вероятно, захотите снять их, прежде чем пытаться его разобрать. Их не должно быть так, чтобы вы могли избежать этого даже до создания XML, который был бы еще лучше.

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

Однако iconv может иметь встроенную поддержку для этого:

Вы можете попробовать использовать mb_detect_encoding , чтобы определить, есть ли у вас другой набор символов (чем UTF-8), а затем mb_convert_encoding для преобразования в UTF-8, если это необходимо. Вероятнее всего, что люди дают вам действительный контент в другом наборе символов, чем предоставление недопустимого UTF-8.

поставьте @перед iconv(), чтобы подавить NOTICE и //IGNORE после UTF-8 в идентификаторе исходного кода, чтобы игнорировать недопустимые символы:

@iconv( 'UTF-8//IGNORE', $destinationEncoding, $yourString ); 

Источник

Как обнаружить неверную строку utf-8 в PHP?

Есть ли способ обнаружить, что в строке utf-8 есть недопустимые символы, прежде чем помещать данные в inconv?

Читайте также:  Search bing with python

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

Вы можете использовать проверку достоверности UTF-8, которая доступна в preg_match [PHP Manual] с PHP 4.3.5. Он вернет 0 (без дополнительной информации), если указана недопустимая строка:

$isUTF8 = preg_match('//u', $string); 

Другая возможность – mb_check_encoding [Руководство PHP] :

$validUTF8 = mb_check_encoding($string, 'UTF-8'); 

Другой функцией, которую вы можете использовать, является mb_detect_encoding [Руководство PHP] :

$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true)); 

Важно установить strict параметр в значение true .

Кроме того, iconv [Руководство PHP] позволяет вам изменять / отменять недействительные последовательности «на лету». (Однако, если iconv обнаруживает такую ​​последовательность, он генерирует уведомление, это поведение не может быть изменено.)

echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL; echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL; 

Вы можете использовать @ и проверить длину возвращаемой строки:

strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string)); 

Проверьте примеры на странице руководства iconv .

Вы не поделились исходным кодом, из которого возникает уведомление. Вы должны добавить его, если хотите более конкретное предложение.

Вы можете попробовать использовать mb_detect_encoding чтобы определить, есть ли у вас другой набор символов (чем UTF-8), а затем mb_convert_encoding для преобразования в UTF-8, если это необходимо. Скорее всего, люди дают вам действительный контент в другом наборе символов, чем предоставление недопустимого UTF-8.

Спецификация символов, недопустимых в UTF-8, довольно ясна. Вы, вероятно, захотите снять их, прежде чем пытаться его разобрать. Их не должно быть так, чтобы вы могли избежать этого даже до создания XML, который был бы еще лучше.

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

Однако iconv может иметь встроенную поддержку для этого:

поставьте @ перед iconv (), чтобы подавить NOTICE и // IGNORE после UTF-8 в исходном коде, чтобы игнорировать недопустимые символы:

@iconv( 'UTF-8//IGNORE', $destinationEncoding, $yourString ); 

Источник

Оцените статью