Eval olmadan PHP preg_replace

2 Cevap

Gibi bir şey kullanmak çalışıyorum:

$newdata = preg_replace($pattern, $replacement, $data);

Şimdi benim yedek gibi bir şeydir

$pattern = "/START(.*?)END/is";
$replacement = "START $config END";

Şimdi, $ config gibi içeriğini içerir

array('Test\\\'s Page')

Sorun içeriği yazmak sonra, $ newData hale geliyor

START array('Test\\'s Page') END

Tek bir \ Yukarıda gördüğünüz gibi değerlendirilir alır çünkü kayıp gidiyor. Bunu nasıl engelleyebilirim?

2 Cevap

Bu ... en azından göre beklendiği gibi çalışır manual of preg_replace.

Yedek olarak ters eğik kullanmak için, ("\ \ \ \" PHP string) katına olmalıdır.

Eğer \\n geri referanslar için kullanabileceğiniz gibi bu gereklidir. Eğer bir geri başvuru istiyorum ama istemiyorsanız \ kendisi bunu kaçmak gerekir. Eğer 3 backslash'lar isterseniz 6 ters bölü yazmak gerekir.

$data = 'Some START END testdata';
$config = 'array(\'Test\\\\\\\\\\\\\'s Page\')';
$replacement = "START $config END";
$pattern = "/START(.*?)END/is";
var_dump($data, $config, $replacement, $pattern);
$newdata = preg_replace($pattern, $replacement, $data);
var_dump($newdata);

Bu aşağıdaki çıktıyı üretecektir.

string(23) "Some START END testdata"
string(26) "array('Test\\\\\\'s Page')"
string(36) "START array('Test\\\\\\'s Page') END"
string(17) "/START(.*?)END/is"
string(47) "Some START array('Test\\\'s Page') END testdata"

Eğer bir dizeye dizi düzleştirme denediniz mi?

$replacement = sprintf('START %s END', implode('', $config));

EDIT: $config benzediğini söz etmedi, biz kesin bir cevap veremem.