2013-08-18 2 views
0

У меня есть база данных с комментариями, у которых много «\ n». Я создаю функцию, которая очищает все комментарии от «\ n» (со стороны представления). Он работает нормально, но есть еще некоторые пользователи, которые используют \ n и мои функции не могут его очистить. странно, если я скопирую их комментарий из БД и прошёл его на моем сайте, моя функция работает хорошо и чистая '\ n'. Если я отредактирую свой комментарий в БД и комментарии последнего пользователя, функция не работает. Я не знаю, что делать, я попытался использовать «mysql replace» в запросе select, но он тоже не работал. еще одна странная вещь, когда я использую select replace в phpMyAdmin, он работает. пожалуйста, помогите мне ..очистить все ' n' от строки - php

свою функцию:

function cleanComments($text){ 

    return stripslashes(str_replace("\\n", ". ",htmlspecialchars($text))); 
} 

мой SQL запрос:

SELECT REPLACE(comment_text, '\\n', '.'),date... 

Кто-нибудь есть идеи, как чистый \ п (строка) от комментариев без изменения их в БД?

ответ

1

В Windows, символ новой строки \r\n. Поскольку большинство ваших пользователей, вероятно, находятся в Windows, это объясняет, почему недостаточно удалить \n.

Теперь это настоящие строки новой строки, которые вы пытаетесь удалить, или буквальный «обратный слэш-n»? Если это фактический перевод строки, то вы должны сделать что-то вроде:

str_replace(["\n","\r"],"",$text); 

Если это буквально, то удвоить эти обратные косые черты.

+0

, это буквально, я вижу комментарии с \ n. что вы имеете в виду двойные обратные косые черты? как .. \\ n? – Dennis

+0

то, что меня смутило, заключается в том, что если вы делаете '$ text = json_encode ($ text)' before и получаете '\ n' и' \ t' в своих строках, вы также должны попробовать использовать одиночные quout, потому что когда я пытался find '' \ n "' то, что он на самом деле делал, это попытка найти новую строку, но в строке не было новой строки. Быть осторожен. –

2

вы должны использовать \n, не \\n

function cleanComments($text){ 

    return stripslashes(str_replace("\n", ". ",htmlspecialchars($text))); 
} 

это потому, что "\n" означает новая строка и "\\n" означает "\n" строку;
пример:

echo "\n";

результат: новая линия

echo "\\n";

результат: \ п

+0

Почему? он работает на регулярном '\ n'. есть особая причина? – Dennis

+0

потому что '' \ n "' означает новую строку, '' \\ n "' означает строку: '" \ n "';
'«\ п»эхо, результат': новая линия
'Эхо«\\ п»;' результат: \ п

+0

Я хочу, чтобы удалить строку «\ п» из моих комментариев. У меня есть комментарии с большим количеством «\ n» – Dennis