#php #javascript #regex #preg-replace #str-replace
#php #javascript #регулярное выражение #preg-replace #str-заменить
Вопрос:
У меня есть две команды javascript replace, которые отлично работают. Мне нужно заставить их работать на PHP.
var body = body.replace(/nn<blockquote>/g, '<blockquote>');
var body = body.replace(/</blockquote>nn/g, '</blockquote>');
Я перепробовал много-много разных возможностей регулярных выражений и множество str_replace, но все они терпят неудачу. То, что, как я думал, сработает, приведено ниже, но они этого не делают:
$body = preg_replace('/n <blockquote>/gi', '<blockquote>', $body);
$body = preg_replace('/</blockquote>\n /gi', '</blockquote>', $body);
$body = str_replace( "nn<blockquote>", "<blockquote>", $body);
$body = str_replace( "<blockquote>nn", "</blockquote>", $body);
В принципе, мне просто нужно удалить две новые строки, которые окружают теги blockquote. Да, я подтвердил, что это новые строки, а не возврат каретки.
Заранее спасибо!
Комментарии:
1. работает ли str_replace? мне они кажутся прекрасными
2. к сожалению, нет, это не так … странное поведение наверняка … Я работал над этим слишком много часов. Новые строки фактически добавляются с помощью str_replace в другом разделе кода, но позже в другом разделе кода после того, как пользователь его просмотрит, мне нужно удалить новые строки. Звучит просто, но понятия не имею, почему simple не работает.
Ответ №1:
Вы пропустили /
в последнем вызове:
$body = str_replace("</blockquote>nn", "</blockquote>", $body);
С этим исправлением ваше решение str_replace должно работать. Я заметил, что вы используете i
модификатор в своих регулярных выражениях. Возможно, вы хотите использовать str_ireplace для выполнения замены без учета регистра.
Комментарии:
1. Тогда ваш код работает. Может быть, входные данные на самом деле каким-то образом изменены, например, с пробелами между символами новой строки и тому подобным?
2. Да, я тоже думал об этом, но когда я возвращаюсь к javacript, он работает отлично. Текст поступает из текстовой области и затем отправляется jquery в PHP-файл. В настоящее время новые строки удаляются с помощью javascript перед тем, как перейти к файлу php, но хотелось бы, чтобы новые строки удалялись в файле php по запросу клиента.
3. Где и как вы проверили, что ваши новые строки не являются возвратами каретки? На сервере непосредственно перед заменой кода или в клиенте? Если вы используете сервер Windows, переводы строк могли измениться.
4. сервер unix … новые строки были добавлены предыдущим str_replace
Ответ №2:
Я думаю, что код правильный, и проблема может заключаться в наличии символов, отличных от перевода строки после или перед вашим тегом. n
Может быть там, но я почти уверен, что у вас там тоже могут быть пробелы.
в целях отладки пытаюсь сделать это
-
Замените ваши новые строки
$body = str_replace(«n», ‘—новая строка—‘, $body);
-
замените пробелы.
$body = str_replace(» «, ‘—пробел—‘, $body);
-
повторите текст
echo $body;
если у вас там что-то есть, вы сейчас это заметите. Удачи 🙂
Комментарии:
1. Когда я запускал код, который вы предоставили для некоторого примера текста, между каждым словом отображался пробел … так что это сработало … но символ новой строки никогда не отображался. Я попытался изменить его на r, и результаты были такими же… некоторые новые строки добавляются, и они не являются n или r . Спасибо за идею о проверке перевода строк таким образом …. по крайней мере, это устраняет некоторые возможности.
2. и последнее, когда новые строки не являются
n
, они могут бытьrn
3. Я обнаружил, что причина, по которой я не могу удалить новые строки, заключается в том, что редактор (ckeditor) добавляет их постфактум. Итак, теперь мне просто нужно найти способ исправить поведение редактора. Спасибо за помощь!