preg_replace_callback("#(.)?((https?|ftp)://[^,:'\"<>\n\r ]+)(?!<\/a>)(['\"<>\n\r ])?#i", function($matches) {
// первая группа есть и содержит запрещенный символ
if ($matches[1] && in_array($matches[1], ["'", '"', "="]))
return $matches[0];
// подставляем, возвращаем
return '<a href...';
}, $text)
'\\1<a href="\\2" target="_blank">\\2</a>\\4'
а вызов коллбека и проверять значение первой группы, если все ок, проводить замену на ссылку, если в первой группе символ из числа запрещенных собстно не трогать upstream megaproxy {
server 127.0.0.1:8000;
keepalive 64;
}
server {
listen 443 ssl http2;
server_name domain.net;
ssl on;
ssl_certificate /etc/..../fullchain.pem;
ssl_certificate_key /etc/....../key.pem;
# static files
root /home/username/app/public/;
access_log /home/username/logs/access.log;
error_log /home/username/logs/error.log;
location @proxy {
proxy_http_version 1.1;
proxy_pass http://megaproxy;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
location / {
try_files $uri @proxy;
}
}
К тому же когда мы пишем что-либо, мы рассчитываем на то, что это что-то может работать с разными бд, mysql, mssql..etc и завязывать код на mysql memory неудобно. По этому как-бы можно использовать Memcached или Mysql Memory, но выгоднее и удобнее поднять redis и не париться.