[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Замена определенного символа в переменной.
Joliat
Подскажите, пожалуйста как сделать так, чтобы из переменной, допустим, $email , которая содержит адреса почт пользователей извлечь символ @ и заменить его на какой-нибудь другой (например, на "(in)")?

Буду рад даже попытке правильно направить мои мысли в нужную сторону.



Спустя 24 минуты, 54 секунды (5.05.2011 - 21:51) inpost написал(а):
str_replace('@','(in)',$text)

Спустя 3 минуты, 44 секунды (5.05.2011 - 21:55) Joliat написал(а):
the_author_meta('user_email', $comment->user_id)

Это и есть переменная, о которой я говорил.

При

$string = "test@mail.ru";

$patterns = "/@/";
$replacements = "(in)";

echo preg_replace($patterns, $replacements, $string); ?> 

Результат получаю: test(in)mail.ru

Но при использовании переменной:

$string = the_author_meta('user_email', $comment->user_id);

$patterns = "/@/";
$replacements = "(in)";

echo preg_replace($patterns, $replacements, $string); ?> 


В результате ничего не заменяется. В чем может таиться причина?

Спустя 2 минуты, 3 секунды (5.05.2011 - 21:57) Joliat написал(а):
inpost, при команде str_replace тоже не выходит.

Может мне нужно как-то преобразовать переменную the_author_meta('user_email', $comment->user_id) ?

Спустя 2 минуты, 36 секунд (5.05.2011 - 21:59) inpost написал(а):
Joliat
Скорее всего $string - не строковая, а какой-то массив, или какой-то левый вид имеет.
сделай echo $string и посмотри, что получишь.

Спустя 9 минут, 58 секунд (5.05.2011 - 22:09) Joliat написал(а):
кстати, echo $string; ничего вообще не вывел.
А the_author_meta('user_email', $comment->user_id) - содержит действительно массив с адресами почты пользователей. если убрать ", $comment->user_id", то будет выводиться только адрес админа, т.к. он первый из пользователей.

Есть выход из сложившейся ситуации?

Спустя 2 минуты, 42 секунды (5.05.2011 - 22:12) inpost написал(а):
Joliat
Нет, потому что возвращается пустой результат.
Можешь попробовать так: print_r($string); , но если там все же находится массив, то выход есть. Покажи результат.

Спустя 2 минуты, 10 секунд (5.05.2011 - 22:14) Joliat написал(а):
Тоже пусто (((

Спустя 2 минуты, 54 секунды (5.05.2011 - 22:17) inpost написал(а):
Функция the_author_meta ничего не вернула, проблема в ней.

Спустя 6 минут, 25 секунд (5.05.2011 - 22:24) Joliat написал(а):
Движок wordpress и там есть такая строка:

<?php  the_author_meta('user_email', $comment->user_id); ?>


Она на странице добавляет к каждому комментарию адрес почты зарегистрированного пользователя.
И она работает отлично. Но почему так ничего не возвращает - не понимаю(

Спустя 1 минута, 37 секунд (5.05.2011 - 22:25) Joliat написал(а):
кстати, когда пишешь так:
print_r(the_author_meta('user_email', $comment->user_id)); 

тогда возвращается адрес почты.

Спустя 3 минуты, 6 секунд (5.05.2011 - 22:28) walerus написал(а):
Цитата (Joliat @ 5.05.2011 - 19:24)
Движок wordpress и там есть такая строка:

<?php  the_author_meta('user_email', $comment->user_id); ?>


Она на странице добавляет к каждому комментарию адрес почты зарегистрированного пользователя.
И она работает отлично. Но почему так ничего не возвращает - не понимаю(

Движков много, какой именно файл ? с такой строкой, у себя ничего подобного не нашел

Спустя 29 секунд (5.05.2011 - 22:29) inpost написал(а):
Joliat
Это типо в функции прописано echo? прям внутри? Ну понятное дело тогда, всё через задницу...
ob_start();
the_author_meta('user_email', $comment->user_id);
$string = ob_get_contents();
ob_end_clean();

Спустя 22 минуты, 21 секунда (5.05.2011 - 22:51) Joliat написал(а):
walerus, файл comments.php в папке с темой.

inpost, без изменений.

Спустя 2 минуты, 12 секунд (5.05.2011 - 22:53) inpost написал(а):
Joliat
String опять пустой? Смотри функцию, и что она возвращает.

Спустя 7 минут, 7 секунд (5.05.2011 - 23:00) walerus написал(а):
Нету у меня такой переменной/функции, мб темплейт другой, кинь весь код файла или попробуй так.


$result_test = the_author_meta('user_email', $comment->user_id);
print_r($result_test );


Результат тоже сюда...

Спустя 4 минуты, 29 секунд (5.05.2011 - 23:05) Joliat написал(а):
echo $string; вернул то же что и просто the_author_meta('user_email', $comment->user_id);

Но решение найдено:
<?php  
ob_start();
the_author_meta('user_email', $comment->user_id);
$string = ob_get_contents();
ob_end_clean();

$patterns = "/@/";
$replacements = "(in)";
echo preg_replace($patterns, $replacements, strip_tags($string)); ?>


Просто изначально была выбрана неправильно процедура обработки. Вместо str_replace все же нужно использовать preg_replace. С preg_replace все заработало!

Спасибо за помощь!!

Спустя 2 минуты, 20 секунд (5.05.2011 - 23:07) inpost написал(а):
$patterns = '@'; // теперь и str_replace будет работать. Тут регулярки нету, не за чем её вообще использовать, когда можно просто строковой функцией обойтись.

Спустя 3 минуты, 23 секунды (5.05.2011 - 23:11) Joliat написал(а):
Тоже вариант!)) Просто я впервые использую эти функции и не знал как прописывать искомые символы.

Спустя 5 минут, 14 секунд (5.05.2011 - 23:16) inpost написал(а):
А вообще, функция низкосортная у тебя, а так как ты брал шаблон, то такого же уровня и шаблон.

Спустя 13 минут, 39 секунд (5.05.2011 - 23:30) walerus написал(а):
ТС - я как то уже запуталсо либо сплю ), в твоем же втором посте написано именно preg_replace,


$string = the_author_meta('user_email', $comment->user_id);

$patterns = "/@/";
$replacements = "(in)";

echo preg_replace($patterns, $replacements, $string); ?>


Что в последнем коде изменилось то, кроме strip_tags()? И то, эта функция просто удаляет теги в строке и ничего больше, не вижу смысла ее использования в данном коде :unsure:

Спустя 59 минут, 11 секунд (6.05.2011 - 00:29) inpost написал(а):
walerus
Функция возвращает не данные, а именно выводит, а вывод данный мы отправляем в буфер ,как это показал я.

Спустя 2 часа, 58 минут, 26 секунд (6.05.2011 - 03:27) walerus написал(а):
inpost

Та это я понимаю ), я про ТС, в частности что он не заметил за собой, что уже использовал эту функцию, так сказать, чтоб дальше внимательно смотрел/писал wink.gif


_____________
О-о-о-о-о-очень начинающий...
Быстрый ответ:

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