2013-07-10 3 views
0

У меня есть следующий кодpreg_replace не заменяя AJAX

$text = '["{!Account__!http://localhost/MF/Public/__NotActivated}","email"]'; 

$replcmnt = array(
    '#{!Account__!http:\/\/localhost\/MF/Public\/__NotActivated}#' => 'text to replace' 
); 

$text = preg_replace(array_keys($replcmnt),$replcmnt,$text); 

Мне нужен выход, чтобы быть '["text to replace","email"]', но по какой-то причине замены не заменяет. Я нахожу это чрезвычайно странным, поскольку это работает, когда я загружаю страницу, но не работает, если я запускаю ее с помощью запроса ajax. Oo

Я также должен отметить, что если я удалю любые косые черты из внутренней части между подчеркиваниями, замените происходит. Поэтому проблема должна быть чем-то с этими косыми чертами.

ex.

$replcmnt = array(
    '#{!Account__!http:-localhost-MF-Public-__NotActivated}#' => 'text to replace' 
); 

Вышеуказанное будет заменено из-за отсутствия косых черенок, я полагаю.

Любая помощь очень ценится

EDIT:

Вот данные прямо перед замены:

$text 
["{!Account__!http:\/\/localhost\/MF\/Public\/__NotActivated}","email"] 

$replcmnt 
Array 
(
    [#{!Account__!http:\/\/localhost\/MF\/Public\/__NotActivated}#] => some long text 
) 
+0

Что произойдет, если вы удалите ненужные обратные косые черты в регулярном выражении? – Barmar

+1

Почему вы используете 'preg_replace', а не' str_replace'? В шаблоне нет символов регулярного выражения. – Barmar

+0

На самом деле, я удивлен, что он не сообщает об ошибке, потому что '{}' являются специальными в регулярных выражениях. – Barmar

ответ

1

Использование str_replace() вместо preg_replace(), так как вы не делаете никакого сопоставления с образцом.

0

Я хотел бы предложить не работать с JSON в виде строки, а работать с фактическая структура данных, которую она представляет. Вы можете десериализации JSON и просто заменить элемент массива, как это:

$test_array = json_decode($text); 
$test_array[0] = $text_to_replace; 
$new_json = json_encode($test_array); 
+1

Это здорово, но моя проблема не в том, как я структурирую свои вещи. –

+0

@php_nub_qq Я не сказал, что это так. Мое предложение не изменяет структуру данных, но даст желаемые результаты. Вы пытаетесь заменить один элемент массива в строке JSON другим. Вы можете просто сделать это в реальном массиве, а не прибегать к функциональности регулярных выражений. Вы просто берете сериализованный ввод данных и десериализируете его, изменяете данные и снова сериализуете его для вывода. –

+0

@php_nub_qq На самом деле, глядя на вход JSON более близко, он недействителен JSON, поэтому я не уверен, что вы сможете его правильно декодировать. –

Смежные вопросы