2010-12-07 2 views
0

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

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

Спасибо.

+1

Этот вопрос сбивает с толку. Если они не могут ввести этот разделитель в строке, как он попадает в строку в первую очередь? И если вы помещаете разделитель на стороне сервера, почему бы не просто ссылаться на позицию строки по его индексу, а не на использование разделителя? – 2010-12-07 02:12:46

+0

Не то, чтобы они не могли ввести разделительный символ, но я бы хотел, чтобы он не интерпретировался как разделитель на стороне сервера. – 2010-12-07 02:24:56

ответ

5

Это древняя проблема, поэтому решите ее так, как она уже решена.

В файлах CSV запятая является разделителем, но записи могут содержать запятые. Как? Окружите записи кавычками. Что делать, если запись содержит кавычки? Выполните двойные кавычки на входе пользователя, чтобы вы знали, что это данные, а не разделители.

Field One,Field Two,"Field, Three","Field ""Four""" 

PHP имеет функции для создания и чтения формата CSV с определенным пользователем разделителями, так что вам даже не придется писать код.

0

Если у вас нет str-getcsv в вашей среде, то в соответствии с комментариями в исходном вопросе.

Предположим, ваш разделителем является символ трубы

$clientString = 'somestring|fobar'; 
$clientString = str_replace('|', '{{{somecrazydelimiter}}}', $clientString); 

Вы можете позже изменить ситуацию после взрыва его и заменить временный разделитель с исходной:

$clientString = str_replace('{{{somecrazydelimiter}}}', '|', $clientString);