Удаление символов из строки PHP

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

Значения, которые я хочу удалить, выглядят так:

Это только то, что я хочу удалить. Соответствующей технологией является PHP.

Предложения приветствуются.

8 ответов

Решение

Спасибо за ответы, ребята. К сожалению, у представленных были следующие проблемы:

неправильно по понятным причинам:

ereg_replace("[^A-Za-z0-9]", "", $string);

Это:

s/[\u00FF-\uFFFF]//

который также использует устаревшую форму регулярного выражения ereg, также не работал, когда я конвертировал в preg, потому что диапазон был слишком велик для обработки регулярного выражения. Кроме того, в этом диапазоне есть отверстия, которые позволяют мусору просачиваться.

Это предложение:

Это проблема кодирования; Вы не должны пытаться убрать этих поддельных персонажей, но должны понимать, почему вы получаете их зашифрованными.

хотя он действителен, он бесполезен, потому что я не могу контролировать, как кодируются полученные данные. Это происходит из внешнего источника. Иногда там есть мусор, а иногда его нет.

Итак, решение, которое я придумала, было относительно грязным, но в отсутствие чего-то более надежного я просто принимаю все стандартные буквы, цифры и символы и отбрасываю остальные.

Это, кажется, работает на данный момент. Решение заключается в следующем:

$fixT = str_replace("£", "£", $string); 
$fixT = str_replace("€", "€", $fixT);
$fixT = preg_replace("/[^a-zA-Z0-9\s\.\/:!\[\]\*\+\-\|\<\>@#\$%\^&\(\)_=\';,'\?\\\{\}`~\"]/", "", $fixT);

Если у кого-то есть идеи получше, я все равно хочу их услышать. Приветствия.

Это проблема кодирования; Вы не должны пытаться убрать этих поддельных персонажей, но должны понимать, почему вы получаете их зашифрованными.

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

Если вы не можете решить проблему с данными из канала и вам необходимо отфильтровать информацию, это может помочь:

PHP5 filter_input очень хорош для фильтрации входных строк и обеспечивает достаточную гибкость

filter_input(input_type, variable, filter, options) 

Вы также можете отфильтровать все данные формы в одну строку, если требуется такая же фильтрация:)

Здесь есть несколько хороших примеров и больше информации об этом:

http://www.w3schools.com/PHP/func_filter_input.asp

Сайт PHP имеет больше информации о параметрах здесь: Фильтры проверки

Попробуй это:

  • Загрузите образец из ленты вручную.
  • Откройте его в Notepad++ или другом расширенном текстовом редакторе (KATE в Linux хорош для этого).
  • Попробуйте изменить кодировку и конвертировать из одной кодировки в другую.

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

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

Было бы гораздо лучше, если бы вы точно решили, какие символы являются действительными (в любом случае это всегда хороший подход, с любым видом очистки данных) и отбросьте все, что не является одним из них. Функция фильтрации PHP является одной из возможностей сделать это, в зависимости от уровня сложности и надежности, которые вам требуются.

Посмотрите на этот вопрос, чтобы получить значение каждого байта в вашей строке. (Это предполагает, что многобайтовая перегрузка отключена.)

Когда у вас есть байты, вы можете использовать их, чтобы определить, что на самом деле представляют собой эти "мусорные" символы. Возможно, они являются результатом неправильной интерпретации кодировки строки или отображения ее неправильным шрифтом, или чего-то еще. Разместите их здесь, и люди могут помочь вам в дальнейшем.

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

s/[\u00FF-\uFFFF]//

Это лишит все, что выше персонажа 255.

Здравствуйте друзья,

     try this Regular Expression to remove unicode char from the string : 

     /*\\u([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])/ 

Спасибо, Чинту (prajapati.chintu.001@gmail.com)

Другие вопросы по тегам