Замена пустого абзаца с использованием preg_replace, пробел не распознан - PullRequest
5 голосов
/ 18 марта 2011

Мне нужно изменить это:

<p> </p>

На это:

<p class="notmobile"> </p>

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

$filecontent  = preg_replace('/<p> <\/p>/', '<p class="notmobile"> </p>',   $filecontent);
$filecontent  = preg_replace('/^<p> <\/p>/', '<p class="notmobile"> </p>',  $filecontent);
$filecontent  = preg_replace('/<p>\s<\/p>/', '<p class="notmobile"> </p>',  $filecontent);
$filecontent  = preg_replace('/<p>\s+<\/p>/', '<p class="notmobile"> </p>', $filecontent);
$filecontent  = str_replace('<p> </p>', '<p class="notmobile"> </p>',   $filecontent);

Чтобы убедиться, что я не схожу с ума, я сделал замену на xxx, чтобы превратить его в yyy, который работал просто отлично.Я думаю проблема в том, что мое пространство не является нормальным пространством, поскольку содержимое, вероятно, состоит в том, что набор символов Windows iso-8859-1 или что-то еще (или это запуталось, потому что мы преобразовали это в utf-8 где-то вдоль строки ..)

Копирование и вставка пустого абзаца из chome / firefox также не сработало.

Я немного застрял :( Спасибо за помощь!

1017 * Обновление:. Вот base64_output, AwMD является строкой 0s, которые я использовал, чтобы отметить начало строки P, как указано выше 1021 * AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A +DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + wqA8L3A + DQo8cD7CoDwvcD4NCjxwPsKgPC9wPg0KPHA + YmFzZTY0ZW5jb2Rpbmc8L3A + PC9w 1023 ** Update2: Я нашел значение charater Ord в РНР: 194 следует 160 - например, это два символ. Странно. *

Ответы [ 4 ]

8 голосов
/ 18 марта 2011

Это действительно кодировка UTF-8 11000010 10100000 NBSP \xA0. Как сказано ранее, это работает:

= preg_replace('/<p>\p{Z}*<\/p>/u', '<p class="notmobile"> </p>', $f);
1 голос
/ 18 марта 2011

Это может быть неразрывный пробел &nbsp; ASCII код 0xA0, 160.

Попробуйте:

$filecontent  = preg_replace('/<p>\xA0<\/p>/', '<p class="notmobile"> </p>',   $filecontent);
1 голос
/ 18 марта 2011

Почему бы просто не заменить <p> на <p class="notmobile">?

$filecontent = str_replace("<p>", "<p class=\"notmobile\">", $filecontent);

Или вы пытаетесь заменить все пары тегов <p> независимо от содержимого на <p class="notmobile"> </p>?


Для пар тегов с пробелом только один попробуйте заменить его следующим образом:

$filecontent = str_replace("<p> </p>", "<p class=\"notmobile\"> </p>", $filecontent);
0 голосов
/ 18 марта 2011
$filecontent  = preg_replace('/<p>\xC2\xA0<\/p>/', '<p class="notmobile"> </p>',    $filecontent);

Легко, когда понимаешь, что ничто не так, как кажется! Модифицируем полезные ответы сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...