Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма при работе с РВ, preg_replace и символ $ в mixed replacem 
:(
    Опции темы
dimes
Дата 6.1.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: 2
Всего: 14



Версия PHP 4.3.10

Код

$pattern=array('/<-title->/');
$replacement=array( $title );
$data=preg_replace ($pattern, $replacement, $data);


Проблемма в том что $title может содержать символ $ например "Price: $39.94"
после замены "Title: <-title->" получаем "Title: Price: .94"

делаю так:
$replacement=array( preg_quote( $title ) );

получается:
"Title: Price: $39\.94";

Как быть?
Удалять слеши не предлогать smile
Добавлено @ 12:18
пока я решил использовать str_replace
но хотелось бы понять как решить эту проблему
PM ICQ   Вверх
Mal Hack
Дата 6.1.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(dimes @ 6.1.2005, 12:12)
Удалять слеши не предлогать smile

А почему?
Код

<?php
$data = "<-title->";
$pattern="/<-title->/";
$replacement="Title $36.58";
$replacement=str_replace( "$" , "$" , $replacement );
$data=preg_replace ($pattern, $replacement, $data);
print $data;

?>

Добавлено @ 12:36
в str_replace вместо второго параметра " & # 3 6 ; " (пробелы убрать)
PM ICQ   Вверх
dimes
Дата 6.1.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: 2
Всего: 14



Цитата(Mal @ 6.1.2005, 13:35)
А почему?

Потому что в тексте могут быть и нужные слеши(всмысле не как технические а как просто символы)

т.е. это единственный способ решить проблему? жаль...
PM ICQ   Вверх
Mal Hack
Дата 6.1.2005, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



dimes
Ты заменяй не слэши, а $.. На его ASCII код.
PM ICQ   Вверх
dimes
Дата 6.1.2005, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: 2
Всего: 14



Цитата(Mal @ 6.1.2005, 14:17)
$.. На его ASCII код.

угу а потом назад если он нужен будет именно как $ а не &#...;

PM ICQ   Вверх
Mal Hack
Дата 6.1.2005, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



dimes
ты сам так поставил задачу. Я так понимаю эти $48.34 - стоимость чего-то. Знак доллара никогда не хранится вмесе со стоимостью.. В БД, например... А лишь доставляется по шаблону рядом с ней.
PM ICQ   Вверх
dimes
Дата 6.1.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: 2
Всего: 14



Ладно проехали, похоже прямого решения не существует... что странно smile
PM ICQ   Вверх
IZ@TOP
Дата 6.1.2005, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Народ, а не проще str_replace использовать???

Код

$pattern=array('/<-title->/');
$replacement=array( $title );
$data=str_replace ($pattern, $replacement, $data);



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
dimes
Дата 6.1.2005, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: 2
Всего: 14



Цитата(IZ @ 6.1.2005, 16:25)
Народ, а не проще str_replace использовать???



Цитата(dimes @ 6.1.2005, 13:12)
пока я решил использовать str_replace
но хотелось бы понять как решить эту проблему


PM ICQ   Вверх
IZ@TOP
Дата 6.1.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



dimes, понял. Можно попробовать сделать так:

Код
$pattern=array('/<-title->/');
$replacement=array( addslashes($title) );
$data=stripslashes(preg_replace ($pattern, $replacement, $data));
По идее все спец символы будут экранированы, в том числе и слеши, после обработки stripslash'ем, экранирование будет снято и все должно остаться как прежде.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
dimes
Дата 7.1.2005, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: 2
Всего: 14



addslashes не подойдет потому что:

Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).

здесь нужно preg_quote но тогда появляются лишние слеши
$title='Price: $34.23 " \Q \qqq'; # Я не стал ставить лишнии слеши чтобы не смущать
print preg_quote($title); # Price\: \$34\.23 " \\Q \\qqq
Что правильно
но после preg_replace получится:
Price\: $34\.23 " \Q \qqq
что не совсем правильно и применять к этой строке stripslashes нельзя.

Вообще функция ведет себя очень странно
если он обрабатывает строку то должна выкидывать экранирующие слеши если нет то не должна обрабатывать $.. как переменную...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0836 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.