[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: В строке заменить все двойные угловые кавычки
Страницы: 1, 2
skolozhabskiy
добрый день,

необходимо в строке заменить все двойные угловые кавычки (варианты « » « ») и прочие специальные символы (например, длинное тире или двойное подчеркивание) заменить на простое одинарное подчеркивание :

$string = 'puf__«krasnaya_ptitsa»';

надо получить вот так: $string = 'puf_krasnaya_ptitsa';

просто удалить специальные символы я могу так:

$text = preg_replace("/[^\p{L}\p{N}]/u", ' ', $text);

но в этом случае получаю такую строку:

$string = 'puf_laquokrasnaya_ptitsaraquo';

подскажите как изменить регулярное выражение для удаления всех специальных символов, чтобы удалить целиком « », а так же « »?

спасибо за помощь
sergeiss
Я предлагаю тебе немного переиначить задачу. Сначала преобразуй все символы в символы, например, посредством функции htmlspecialchars_decode, а уже потом работай со строкой. Мне кажется, хотя не буду утверждать однозначно, что так будет проще.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
skolozhabskiy
sergeiss
спасибо за идею, буду пробовать


но может все же есть возможность изменить готовый алгоритм замены специальных символов, чтобы решить мою проблему.

спасибо за любые идеи
skolozhabskiy
sergeiss

проверил, ваша идея не работает все равно получаю например так:

Puf___laquo_Krasnaya_ptitsa_

а надо так

Puf_krasnaya_ptitsa

есть еще идеи

спасибо
sergeiss
Цитата (skolozhabskiy @ 21.04.2013 - 13:36)
sergeissпроверил, ваша идея не работает

Код показывай! Будем вместе думать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
$string = <<<DOC
puf__&laquo;krasnaya_ptitsa&raquo;
DOC;
echo preg_replace('/&([a-z]+|#\d{2,4});/i', '', $string);
skolozhabskiy
killer8080

к сожалению, результат получаем Win 7 такой:

puf___laquo_krasnaya_ptitsa_raquo___

только вот такое громоздкое решение дает необходимый результат

echo preg_replace('/_{2,}/','_', preg_replace('/&laquo;|&raquo;|«|»|[—-\s]/','', $string))

, нужно не только убрать лишние символы, но и между словами поставить подчеркивание, чтобы получилось - puf_krasnaya_ptitsa, то есть нужно не только убрать ненужные символы, но и двойное подчеркивание тоже заменить на одинарное подчеркивание между словами.

спасибо за помощь
killer8080
А разве моя регулярка не убирала &laquo; &raquo; ?
skolozhabskiy
нет не убирает (только что проверил) и еще между словами могут быть пробелы, которые нужно так же заменить подчеркиванием одинарным. спасибо за помощь
killer8080
Цитата (skolozhabskiy @ 21.04.2013 - 16:33)
нет не убирает (только что проверил)

запусти фрагмент кода, который я привел выше. Там все работало.
skolozhabskiy
я запускал через dereamweaver 5 к сожалению не работает, возможно из-за конструкции строки $string = <<<DOC.... а как-то иначе ее построить можно, если просто $string = 'puf__&laquo;krasnaya_ptitsa&raquo'; то проверял не работает точно. спасибо
killer8080
Цитата (skolozhabskiy @ 21.04.2013 - 16:45)
я запускал через dereamweaver 5

в смысле в dreamweaver? Сделай файл с расширением .php и запусти его нормально, через веб.
Не может он не работать, что то не то делаешь.
skolozhabskiy
1. да я запускаю через dreamweaver sc5
2. у меня все файлы с расширением .php
3. на $string = <<<DOC
puf__&laquo;krasnaya_ptitsa&raquo;
DOC; - выдает результат puf__krasnaya_ptitsa если только строка начинается от левого края рабочей области dreamweaver
3. при этом сохраняется двойное подчеркивание между первыми словами.

можно как-то иначе, нормально, представить строку вместо $string = <<<DOC?

и еще между словами могут быть пробелы и они тоже должны быть заменены на одинарное подчеркивание

спасибо
killer8080
Цитата (skolozhabskiy @ 21.04.2013 - 16:59)
можно как-то иначе, нормально, представить строку вместо $string = <<<DOC?

естественно, обычные каычки smile.gif
Цитата (skolozhabskiy @ 21.04.2013 - 16:59)
и еще между словами могут быть пробелы и они тоже должны быть заменены на одинарное подчеркивание

для этого понадобится вторая регулярка.
skolozhabskiy
а вот так

$string = 'p—uf__&laquo;k-rasnaya_ pt«»itsa&raquo;';
echo preg_replace('/&([a-z]+|#\d{2,4});/i', '', $string);

результат уже такой:

p—uf__k-rasnaya_ pt«»itsa

нужно удалять все пробелы, длинные тире, тире короткие и двойные угловые кавычки, их коды или двойные подчеркивания

спасибо за помощь
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.