2009-07-02 3 views
0

Ich habe viele Schwierigkeiten, eine Bild-URL mit Leerzeichen zu vergleichen.Regex, um Leerzeichen in Bildern in Entitäten zu ändern

Ich brauche diese

http://site.com/site.com/files/images/img 2 (5).jpg 

in ein div wie diese zu machen:

.replace(/(http:\/\/([^\s]+\.(jpg|png|gif)))/ig, "<div style=\"background: url($1)\"></div>") 

Hier ist der Thread über das: regex matching image url with spaces

Jetzt habe ich beschlossen, zunächst das machen Leerzeichen in Entitäten, damit der obige Regex funktioniert.

Aber ich habe wirklich eine Menge Schwierigkeiten damit. Etwas wie folgt aus:

.replace(/http:\/\/(.*)\/([^\<\>?:;]*?) ([^\<\>?:;]*)(\.(jpe?g|png|gif))/ig, "http://$1/$2%20$3$4") 

Ersetzt ein Raum, aber der ganze Rest sind noch Räume.

Ich muss eine Regex schreiben, die besagt, alle Leerzeichen zwischen http: // und einer Bilderweiterung (png | jpg | gif) in% 20.

An diesem Punkt, ehrlich gesagt nicht sicher, ob es überhaupt möglich ist. Jede Hilfe wird geschätzt, danke.

Der Versuch, Paolo Flucht:

.escape(/http:\/\/(.*)\/([^\<\>?:;]*?) ([^\<\>?:;]*)(\.(jpe?g|png|gif))/) 

Eine andere Art, wie ich dies tun kann, ist serverseitig in PHP zu entkommen und in PHP kann ich direkt Schlamassel mit dem Dateinamen, ohne dass es in Regex übereinstimmen.

Aber soweit ich weiß, etwas wie htmlentities gelten nicht für Leerzeichen. Irgendwelche Hinweise in dieser Richtung wären auch großartig.

+0

Sie müssen die Escape-Funktion aufrufen, auf welcher Zeichenfolge Sie die Regex aufrufen ... –

+0

Welche Zeichenfolge? Ich muss eine (y) Bild-URL zuordnen. – Mark

+0

Sie müssen es gegen was? –

Antwort

0

Wenn Sie den Ersatzzeichen steuern möchten, wollen aber nicht einen regulären Ausdruck verwenden, eine einfache ...

$destName = str_replace(' ', '-', $sourceName); 

wahrscheinlich ..would die effizientere Lösung.

+0

Das hat bei mir funktioniert, danke. obwohl ich es mit% 20 ersetzt habe. – Mark

4

Versuchen Sie, die escape Funktion:

>>> escape("test you"); 
test%20you 
0

Lassen Sie uns sagen Sie die String-Variable urlWithSpaces haben, die auf eine URL festgelegt ist, die Leerzeichen enthält.

einfach gehen:

urlWithoutSpaces = escape(urlWithSpaces); 
+0

Das Problem ist, wenn ich etwas mit der Client-Seite zu tun habe, wird die URL Teil eines Beitrags sein, den der Benutzer eingereicht hat, also müsste ich ihn zuerst abgleichen. – Mark

0

Was ist mit urlencode() - das kann tun, was Sie wollen.

+0

Oh, und rawurlencode() ist möglicherweise besser geeignet für die Space-Encodings. – Meep3D

+0

Oh, es ist auch PHP. – Meep3D

+0

Vielen Dank, obwohl das zu viel codiert. Wenn '/'% 2F wird, verweigert die URL die Arbeit. – Mark

0

Auf der JS-Seite sollten Sie encodeURI() und escape() nur als Fallback verwenden. Der Grund für die Verwendung von encodeURI() ist, dass UTF-8 für die Codierung verwendet wird, während escape() ISO Latin verwendet. Die gleichen Probleme gelten für die Decodierung.

encodeURI = encodeURI || escape; 

alert(encodeURI('image name.png'));