на моем веб-сайте я хочу заменить ссылки на некоторые другие ссылки, подобные этому
www.abc.com
или http://abc.com
будут заменены на
http://www.XXXXXX.com/sonal?www.abc.com
или
http://www.XXXXXX.com/sonal?http://abc.com
поэтому я использую этот код, но этот код дает некоторую ошибку
Warning: preg_replace() [function.preg-replace]: Unknown modifier '/'
in /home/XXXXX/public_html/YYYYYYYYY/KKKKKK.php on line 495
$search_array = array( "/\[url]www|http://.([^'\"]*)\[\/url]/iU", "/\[url]([^'\"]*)\[\/url]/iU", "/\[url=www|http://.([^'\"\s]*)](.*)\[\/url]/iU", "/\[url=([^'\"\s]*)](.*)\[\/url]/iU" ); $replace_array = array( "<a href=\"http://XXXXXX.com/sonal?.\\1\" target=\"_blank\" rel=\"nofollow\">www. \\1</a>", "<a href=\"\\1\" target=\"_blank\" rel=\"nofollow\">\\1</a>", "<a href=\"http://XXXXXX.com/sonal?.\\1\" target=\"_blank\" rel=\"nofollow\">\\2</a>", "<a href=\"\\1\" target=\"_blank\" rel=\"nofollow\">\\2</a>" ); $msg = preg_replace($search_array, $replace_array, $msg); return $msg;
Существует несколько способов решить эту проблему.
Escaping "/"
$search_array = array( "/\[url]www|http:\/\/.([^'\"]*)\[\/url]/iU", "/\[url]([^'\"]*)\[\/url]/iU", "/\[url=www|http:\/\/.([^'\"\s]*)](.*)\[\/url]/iU", "/\[url=([^'\"\s]*)](.*)\[\/url]/iU" );
Или, используя разный повторитель, например «#»,
$search_array = array( "#\[url]www|http://.([^'\"]*)\[\/url]#iU", "#\[url]([^'\"]*)\[\/url]#iU", "#\[url=www|http://.([^'\"\s]*)](.*)\[\/url]#iU", "#\[url=([^'\"\s]*)](.*)\[\/url]#iU" );
.$search_array = array( "#\[url]www|http://.([^'\"]*)\[\/url]#iU", "#\[url]([^'\"]*)\[\/url]#iU", "#\[url=www|http://.([^'\"\s]*)](.*)\[\/url]#iU", "#\[url=([^'\"\s]*)](.*)\[\/url]#iU" );
"/\[url]www|http://.([^'\"]*)\[\/url]/iU", ^ ^^ ^
Вам либо нужно избегать двух //
в середине до \/\/
, либо, лучше, использовать разные разделители для регулярного выражения:
"~\[url]www|http://.([^'\"]*)\[/url]~iU",