skolozhabskiy
21.04.2013 - 12:51
добрый день,
необходимо в строке заменить все двойные угловые кавычки (варианты « » « ») и прочие специальные символы (например, длинное тире или двойное подчеркивание) заменить на простое одинарное подчеркивание :
$string = 'puf__«krasnaya_ptitsa»';
надо получить вот так: $string = 'puf_krasnaya_ptitsa';
просто удалить специальные символы я могу так:
$text = preg_replace("/[^\p{L}\p{N}]/u", ' ', $text);
но в этом случае получаю такую строку:
$string = 'puf_laquokrasnaya_ptitsaraquo';
подскажите как изменить регулярное выражение для удаления всех специальных символов, чтобы удалить целиком « », а так же « »?
спасибо за помощь
sergeiss
21.04.2013 - 13:21
Я предлагаю тебе немного переиначить задачу. Сначала преобразуй все символы в символы, например, посредством функции htmlspecialchars_decode, а уже потом
работай со строкой. Мне кажется, хотя не буду утверждать однозначно, что так будет проще.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
skolozhabskiy
21.04.2013 - 13:27
sergeiss
спасибо за идею, буду пробовать
но может все же есть возможность изменить готовый алгоритм замены специальных символов, чтобы решить мою проблему.
спасибо за любые идеи
skolozhabskiy
21.04.2013 - 13:36
sergeiss
проверил, ваша идея не работает все равно получаю например так:
Puf___laquo_Krasnaya_ptitsa_
а надо так
Puf_krasnaya_ptitsa
есть еще идеи
спасибо
sergeiss
21.04.2013 - 16:23
Цитата (skolozhabskiy @ 21.04.2013 - 13:36) |
sergeissпроверил, ваша идея не работает |
Код показывай! Будем вместе думать.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
killer8080
21.04.2013 - 17:02
$string = <<<DOC
puf__«krasnaya_ptitsa»
DOC;
echo preg_replace('/&([a-z]+|#\d{2,4});/i', '', $string);
skolozhabskiy
21.04.2013 - 17:27
killer8080
к сожалению, результат получаем Win 7 такой:
puf___laquo_krasnaya_ptitsa_raquo___
только вот такое громоздкое решение дает необходимый результат
echo preg_replace('/_{2,}/','_', preg_replace('/«|»|«|»|[—-\s]/','', $string))
, нужно не только убрать лишние символы, но и между словами поставить подчеркивание, чтобы получилось - puf_krasnaya_ptitsa, то есть нужно не только убрать ненужные символы, но и двойное подчеркивание тоже заменить на одинарное подчеркивание между словами.
спасибо за помощь
killer8080
21.04.2013 - 17:32
А разве моя регулярка не убирала « » ?
skolozhabskiy
21.04.2013 - 17:33
нет не убирает (только что проверил) и еще между словами могут быть пробелы, которые нужно так же заменить подчеркиванием одинарным. спасибо за помощь
killer8080
21.04.2013 - 17:37
Цитата (skolozhabskiy @ 21.04.2013 - 16:33) |
нет не убирает (только что проверил) |
запусти фрагмент кода, который я привел выше. Там все работало.
skolozhabskiy
21.04.2013 - 17:45
я запускал через dereamweaver 5 к сожалению не работает, возможно из-за конструкции строки $string = <<<DOC.... а как-то иначе ее построить можно, если просто $string = 'puf__«krasnaya_ptitsa»'; то проверял не работает точно. спасибо
killer8080
21.04.2013 - 17:51
Цитата (skolozhabskiy @ 21.04.2013 - 16:45) |
я запускал через dereamweaver 5 |
в смысле в dreamweaver? Сделай файл с расширением .php и запусти его нормально, через веб.
Не может он не работать, что то не то делаешь.
skolozhabskiy
21.04.2013 - 17:59
1. да я запускаю через dreamweaver sc5
2. у меня все файлы с расширением .php
3. на $string = <<<DOC
puf__«krasnaya_ptitsa»
DOC; - выдает результат puf__krasnaya_ptitsa если только строка начинается от левого края рабочей области dreamweaver
3. при этом сохраняется двойное подчеркивание между первыми словами.
можно как-то иначе, нормально, представить строку вместо $string = <<<DOC?
и еще между словами могут быть пробелы и они тоже должны быть заменены на одинарное подчеркивание
спасибо
killer8080
21.04.2013 - 18:02
Цитата (skolozhabskiy @ 21.04.2013 - 16:59) |
можно как-то иначе, нормально, представить строку вместо $string = <<<DOC? |
естественно, обычные каычки
Цитата (skolozhabskiy @ 21.04.2013 - 16:59) |
и еще между словами могут быть пробелы и они тоже должны быть заменены на одинарное подчеркивание |
для этого понадобится вторая регулярка.
skolozhabskiy
21.04.2013 - 18:09
а вот так
$string = 'p—uf__«k-rasnaya_ pt«»itsa»';
echo preg_replace('/&([a-z]+|#\d{2,4});/i', '', $string);
результат уже такой:
p—uf__k-rasnaya_ pt«»itsa
нужно удалять все пробелы, длинные тире, тире короткие и двойные угловые кавычки, их коды или двойные подчеркивания
спасибо за помощь
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.