2014-02-13 3 views
1

У меня есть проблема с отделкой:PHP функция обрезки не удаляет последний символ

print_r($c); 
print_r(trim($c,'[]')); 

результаты:

[left] 
left] 

Обрезка документация говорит:

character_mask Необязательно , разделенные символы также могут быть , заданные с помощью character_mask параметр. Просто перечислите все символы , которые вы хотите удалить. С помощью .. вы можете указать диапазон символов .

Почему не удаляется ]?

Хорошо, ясно, что у меня есть дополнительный невидимый символ в конце строки.

Но как он появился?

У меня есть массив новых позиций, что я взрываются как это:

$content = explode("\n", $content); 

Как прийти \ п по-прежнему остается в конце строки?

+2

[Can not reproduce] (http://codepad.org/m232PbNd). – Rikesh

+0

Работает для меня ... –

+3

Что произойдет, если вы 'var_dump ($ c)'? Есть ли у вас такая длина, которую вы ожидаете? Я предполагаю, что есть что-то еще, невидимое, в конце строки; возможно, возвращение каретки или подобное.Посмотрите, если 'trim (trim ($ c), '[]'));' решает проблему - если это так, у вас есть один из стандартных пробельных символов после закрывающей квадратной скобки. (Если это работает, вы можете сохранить выполнение двух вызовов для обрезки, используя 'trim ($ c," \ t \ n \ r \ 0 \ x0B [] ");'.) –

ответ

3

Я предлагаю вам есть что-то еще в конце вашей строки, после ], которую вы не видите. Во-первых, подтверждают эту теорию:

var_dump($c); 

... если что дает вам что-нибудь, кроме string(6) "[left]", то это подтверждает, есть невидимые/непечатные символы в конце вашей строки.

Шансы хорошие, в этом случае, что это просто нормальные пробелы, что стандартная функция trim() будет удалена. Таким образом, вместо того, перекрывая его параметр normal $character_mask, добавьте свои символы в маске: (. Обратите внимание на изменение в двойных кавычках там to allow the escape sequences to be interpreted properly)

trim($c, " \t\n\r\0\x0B[]"); 

Как вы говорите, что вы используете explode() на \n , и с оставшимся , я предлагаю принять ответ от this question, чтобы использовать preg_split() вместо explode(), поэтому справляемся с парами CRLF и одиночными символами LF по мере разрыва строки. "Be liberal in what you accept from others."

+0

Удивительная благодарность! 1 вопрос, я использовал explode на \ n для создания моего массива элементов, который включает [left], но взорваться на \ n должен был удалить этот символ? это не так! –

+0

@salivan, если вы на окнах, разветвление обычно выглядит так: '\ r \ n', что означает, что даже если вы убрали' \ n', останется '\ r'. – Thorbear

+0

@Thorbear Я нахожусь на mac, но есть ли разница между ОС? –

0

Он работал, но я думаю, что вы могли бы иметь дополнительное пространство, как показано ниже код:

 $c='[left] '; //extra space may be the cause of result 
     print_r($c); 
     print_r(trim($c,'[]')); 

Если не так, поделитесь полный код с нами

Смежные вопросы