2012-03-24 9 views
0

Ich möchte ein PHP-Skript, das ich in WordPress (Auto-Featured-Bild-Plugin) verwende, ändern.
Das Problem ist, dass dieses Skript Dateinamen für Thumbnails basierend auf den URLs des Bildes erstellt.PHP/Regex: Skript zum Erstellen von Dateinamen mit Bindestrichen anstelle von Leerzeichen

Das hört sich toll an, bis Sie einen Dateinamen mit Leerzeichen und die Miniaturansicht ist so etwas wie this%20Thumbnail.jpg und wenn der Browser auf http://www.whatever.com/this%20Thumbnail.jpg geht bekommen es die %20 in einen Raum konvertiert und es gibt keinen Dateinamen auf dem Server mit diesem Namen (mit Leerzeichen) .

Um dies zu beheben, Ich denke Ich brauche die folgende Zeile in einer solchen Art und Weise zu ändern, dass $ imageURL %20 in Leerzeichen umwandeln gefiltert wird. Ton richtig?
Hier ist der Code. Vielleicht kannst du mir sagen, ob ich den falschen Baum anbreche.
Danke!

<?php 
    static function create_post_attachment_from_url($imageUrl = null) 
    { 
     if(is_null($imageUrl)) return null; 
     // get file name 
     $filename = substr($imageUrl, (strrpos($imageUrl, '/'))+1); 
     if (!(($uploads = wp_upload_dir(current_time('mysql'))) && false === $uploads['error'])) { 
      return null; 
     } 
     // Generate unique file name 
     $filename = wp_unique_filename($uploads['path'], $filename); 
?> 
+0

Warum nicht md5 verwenden? – tttony

+0

Was ist mit _other_ characters? –

+0

@ttony - Verwenden Sie md5 wie? – user1289585

Antwort

1

zu einer angemesseneren und vollständige Antwort Editiert:

static function create_post_attachment_from_url($imageUrl = null) 
{ 
    if(is_null($imageUrl)) return null; 

    // get the original filename from the URL 
    $filename = substr($imageUrl, (strrpos($imageUrl, '/'))+1); 

    // this bit is not relevant to the question, but we'll leave it in 
    if (!(($uploads = wp_upload_dir(current_time('mysql'))) && false === $uploads['error'])) { 
     return null; 
    } 

    // Sanitize the filename we extracted from the URL 
    // Replace any %-escaped character with a dash 
    $filename = preg_replace('/%[a-fA-F0-9]{2}/', '-', $filename); 

    // Let Wordpress further modify the filename if it may clash with 
    // an existing one in the same directory 
    $filename = wp_unique_filename($uploads['path'], $filename); 

    // ... 
} 
+0

bin ich falsch in der Annahme, dass das Problem nicht mit der Zeile ist, die Sie beschreiben, sondern mit Zeile 5 in meinem Codebeispiel? Ich danke Ihnen für Ihre Antwort, aber ich glaube nicht, dass sie meine Frage beantwortet. Vielen Dank! – user1289585

+0

Ich denke, Ihr Problem ist mir nicht völlig klar: Versuchen Sie, einen Fehler zu beheben oder nur die kleinen Unannehmlichkeiten zu beheben, dass% 20-Sequenzen im Dateinamen der gespeicherten Miniaturansicht entkernt wurden? Soweit ich das beurteilen kann, nimmt das Skript die URL von einem Bild aus dem Internet, holt den Inhalt und speichert das Bild auf der Festplatte, um einen Anhang in Wordpress zu erstellen. Ich habe den Code bearbeitet, um alle Zeichen (wie Leerzeichen, Symbole usw.) aus dem ursprünglichen Bilddateinamen zu entfernen und diese Zeichen durch Bindestriche zu ersetzen. –

+0

$ filename = preg_replace ('/% [a-fA-F0-9] {2} /', '-', $ Dateiname); - Diese Linie hat mein Leben gerettet! danke – danyo

0

Sie besser die Räume in Bildnamen mit Unterstrichen zu ersetzen oder Bindestriche mit regexp.

$string = "Google%20%20%20Search%20Amit%20Singhal" 
preg_replace('/%20+/g', ' ', $string); 

Dieser Regex ersetzt mehrere Leerzeichen (% 20) durch ein einzelnes Leerzeichen ('').

+0

codef0rmer - ich verstehe deine Antwort nicht. Ich möchte Räume nicht per se ersetzen. Vielleicht war ich mit meiner Frage nicht klar. Ich möchte das obige Skript ändern, das die Dateinamen als URLs erhält, bei denen% 20 durch Leerzeichen ersetzt wird, mit einem Skript, das die Dateinamen mit% 20 übernimmt und die% 20s durch Bindestriche ersetzt. – user1289585

+0

Ich denke, wenn Sie ein Bild hochladen, ersetzt es nicht Leerzeichen mit einigen Zeichen (zB Unterstrich oder Hypen) und die Bild-URL hat% 20 Zeichen ersetzen Leerzeichen, die Sie nicht wollen. Mein Vorschlag wäre, Leerzeichen durch Unterstreichen/Hypen zu ersetzen, während Sie ein Bild hochladen, anstatt% 20 später zu analysieren. Wie auch immer, ich habe meine Antwort aktualisiert. – codef0rmer

+1

Entschuldigung, aber ich glaube, dass die Regex falsch ist: '/% 20 + /' sollte '/ (% 20) + /' sein, sonst ersetzt man nur Sachen wie '% 20' und'% 200', '% 2000 ', usw. Außerdem sollte das' + 'nicht notwendig sein, und der 'g'-Modifizierer ist nicht gültig. Wenn ich mich nicht irre, ersetzt' preg_replace 'sowieso alle Vorkommen in der Zeichenkette. –