2016-06-17 6 views
-2

Ich habe Text, der von einem CMS generiert wird, so dass ich die ausgegebene Zeichenfolge nicht steuern kann.PHP: doppelte Anführungszeichen ersetzen

Ich habe alle Arten von PHP-Funktionen ausprobiert, doppelte Anführungszeichen durch einzelne zu ersetzen, aber ohne Erfolg. Kann jemand eine Lösung vorschlagen?

<?php 
$comments = str_replace('"', "'", ("6:00 pm , practiced "Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"); 

echo $comments; 
?> 

Fehlermeldung:

Parse error: syntax error, unexpected 'Zen' (T_STRING) in 

FULL Code aus Vorlage hinzu:

{exp:query 
    sql="SELECT 
    t.entry_id, 
    entry_date, 
    field_id_4 as tunnel, 
    field_id_2 as log_time, 
    field_id_17 as log_video, 
    field_id_18 as log_comments 
    FROM exp_channel_data d, exp_channel_titles t 
    WHERE t.channel_id = 7 
    AND t.status != 'Delete' 
    AND author_id = '{embed:member_id}' 
    AND t.entry_id = d.entry_id 
    AND field_id_19 = '' 
    ORDER BY entry_id DESC" 
} 
    <?php 
    //strip out Playa bumph from our tunnel 
    $tunnel = substr(strrchr("{tunnel}","]"),2); 
    preg_match_all("/\[[^\]]*\]/", "{tunnel}", $matches); 
    $tunnel_id = trim($matches[0][0],'[,]'); 

    $time[] = array(
     "entry_id" => "{entry_id}", 
     "tunnel" => $tunnel, 
    "tunnel_id" => $tunnel_id, 
     "entry_date" => "{entry_date}", 
     "log_time" => "{log_time}", 
     "log_video" => "{log_video}", 
     "log_comments" => "{log_comments}"); 
    ?> 
{/exp:query} 

<script> 
    IBA.logged_time = <?php echo json_encode($time); ?> 
</script> 

log_comments ist in dem vorliegenden Problem.

+1

Schauen Sie sich einfach die Codeformatierung an ... – Rizier123

Antwort

1

Sie müssen doppelte Anführungszeichen in Ihrem Zeichenfolgenliteral vermeiden. Es gibt auch eine umatched linke Klammer Sie entfernen müssen:

<?php 
$comments = str_replace('"', "'", "6:00 pm , practiced \"Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"); 

echo $comments; 
?> 

Ausgang:

6:00 pm , practiced 'Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed) 

Edit: Da Sie mehr Code gepostet haben sehe ich, was los ist. Probieren Sie den folgenden Code aus. Es funktioniert, wenn der Inhalt nicht irgendwo "LOG_COMMENTS \ n" enthält.

$time[] = array(
    "entry_id" => "{entry_id}", 
    "tunnel" => $tunnel, 
    "tunnel_id" => $tunnel_id, 
    "entry_date" => "{entry_date}", 
    "log_time" => "{log_time}", 
    "log_video" => "{log_video}", 
    "log_comments" => <<<LOG_COMMENTS 
{log_comments} 
LOG_COMMENTS 
); 

Dennoch ist dies ein sehr schlechtes Design. Gibt es einen Grund, warum der CMS keine Daten in einer Datenbank oder einer Nur-Text-Datei speichern kann?

+0

Das ist das Problem, ich kann die Zeichenfolge nicht kontrollieren. Ich habe versucht, zu entkommen, aber das hat auch nicht funktioniert. – KoalaKid

+0

Woher bekommst du die Zeichenfolge? – ShiraNai7

+0

Ein CMS, also kann ich nicht kontrollieren, was generiert wird. – KoalaKid

0

bearbeiten {log_comments}-{addslashes(log_comments)}

Sie benötigen die Eingabe der Zeichenfolge Sie in den Prozess des Aufbaus sind zu entkommen oder diese Zeichenfolge wird sich durch die Schurken Anführungszeichen aufgebrochen werden.

What it means to escape a string.

Siehe docs

+0

Ich habe das versucht. Ich weiß, das sollte unglaublich einfach sein, ich muss das 100 Mal getan haben, aber es macht immer einen Fehler aus. – KoalaKid

+0

Dann den Fehler zurückverfolgen. Lesen Sie den Fehler vor. Teilen Sie Ihren Code auf mehrere Zeilen auf, wenn Sie nicht genügend Feedback von dem Fehler erhalten, um zu sagen, welche Zeilennummer und Spalte es ist. Ich denke, dass nur Sie in der Lage sein werden, Ihr eigenes Problem an dieser Stelle zu lösen, aber der Kern des Problems hier ist offensichtlich die Notwendigkeit, Ihren eingehenden String-Stream zu entkommen. – Jonathan

+0

Einverstanden. Ich habe es in eine einfache PHP-Datei mit einer der Problemzeichenfolgen aufgeteilt und jede Art von PHP-Funktion ausprobiert, die mir einfällt. – KoalaKid

0

Sie wahrscheinlich jenen Text in irgendeiner Variable bekommen sollten. Stellen Sie zuerst sicher, dass Sie keinen Syntaxfehler gemacht haben. Vielleicht, weil Sie gerade diesen Text vom Browser kopiert haben und ihn auf str_replace() setzen wollen. Sie müssen das Zitat wie folgt entkommen.

$comments = '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'; 

Mit Schrägstrich. Nur dann können Sie diesen Teil in Ihrem Code verwenden

$comments = str_replace('"', "'", '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'); 

ODER Sie

$comments = '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'; 

$com = htmlspecialchars ($comments); 

$replacedText = str_replace("&quot;","&#039;",$com); 

echo $com; 

echo "<br/>"; 

echo $replacedText; 

dieses wie tun können so erste Sonderzeichen in HTML-Entitäten konvertieren. htmlspecialchars Dann können Sie das Zitat einfach mit der Funktion str_replace ersetzen.

Ich hoffe, Sie bekommen, wo Sie Fehler gemacht haben.