Relativamente al problema degli spazi vuoti nei nomi puoi seguire questa discussione nelle pagine del manuale del PHP it1 .php. net/ manual/en/function.urldecode.php#101401 ( togli tu gli spazi che non posso inserire link attivi ) se ho capito il problema dovrebbe fare al caso tuo, comunque sia è un problema di codifica/decodifica della query string di riferimento.
Se usi una GET per prendere i valori da passare al database ( a dire il vero spero vivamente che tu non faccia una cosa del genere senza parsare la stringa prima ) comunque questi valori saranno codificati secondo **RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax.
**Ho notato che a volte per eliminare questo problema basta passare le stringhe tra virgolette, che so: image="quanto è bella questa.jpg" ma non sempre funziona, probabilmente dipende da come il browser codifica la stringa prima di inviarla al server.
Resta comunque il fatto che una verifica sull'esistenza o meno dell'immagine devi comunque farla a meno che questa non risieda in un database, a quel punto basta verificare la query di ritorno, nel tuo caso il collo di bottiglia è senza dubbio la condizione ( che non è un operatore ternario in quanto questo è il costrutto **$risultato = ( espressione ) ? condizione 1 : condizione 2; **ma va be lasciamo stare ) rimane il fatto che usi due istruzioni per il controllo di flusso in luogo di una sola, io fare una cosa alternativa tipo, scrivere una nuova regex che verifichi il nome del file da cercare, compreso anche di codifica, e poi semplicemente verificare la condizione una sola volta.
Però non chiedermi nulla sulle regex che sono carentissimo