Entfernen Sie Anführungszeichen vom Anfang und Ende der Zeichenfolge in PHP
Lesezeit: 6 Minuten
Neuling
Ich habe solche Saiten:
"my value1" => my value1
"my Value2" => my Value2
myvalue3 => myvalue3
muss ich loswerden " (doppelte Anführungszeichen) am Ende und am Anfang, wenn diese vorhanden sind, aber wenn es diese Art von Zeichen in String gibt, dann sollte es dort belassen werden. Beispiel:
"my " value1" => my " value1
Wie kann ich das in PHP machen – gibt es dafür eine Funktion oder muss ich es selbst codieren?
Was tun bei ""Hello " World""?
– Madaras Geist
16. März 2012 um 11:04 Uhr
“”Hallo “Welt”” => “Hallo “Welt”
– Neuling
17. März 2012 um 6:23 Uhr
Ich bin mir nicht sicher, ob mir etwas fehlt, wenn ich all die komplexen regulären Ausdrücke sehe. Aber preg_replace('/(^"|"$)/', '', '""Hello " World""') kehrt zurück "Hello " World". Oder auch '/^"|"$/' als Muster funktioniert auch.
– Paul Spiegel
22. Februar 2020 um 19:11 Uhr
Ihr gesunder Menschenverstand
Die wörtliche Antwort wäre
trim($string,'"'); // double quotes
trim($string,'\'"'); // any combination of ' and "
Es entfernt alle führenden und abschließenden Anführungszeichen aus einer Zeichenfolge.
Wenn Sie das erste und das letzte Anführungszeichen unbedingt entfernen müssen, falls vorhanden, könnte es sich um einen regulären Ausdruck wie diesen handeln
preg_replace('~^"?(.*?)"?$~', '$1', $string); // double quotes
preg_replace('~^[\'"]?(.*?)[\'"]?$~', '$1', $string); // either ' or " whichever is found
Wenn Sie nur entfernen müssen, wenn das führende und das nachgestellte Anführungszeichen streng gepaart sind, verwenden Sie die Funktion aus der Antwort von Steve Chambers
Wenn es jedoch Ihr Ziel ist Lesen Sie einen Wert aus einer CSV-Datei, fgetcsv ist die einzig richtige Option. Es kümmert sich um alle Grenzfälle und entfernt auch die Wertgehäuse.
Gute Funktion in der Tat, aber OP möchte das ” in der Mitte lassen und nur am Anfang und Ende entfernen …
– Makura Yami
16. März 2012 um 9:37 Uhr
Wenn das zweite Zeichen auch ‘”‘ ist, oder auch das vorletzte, dann wird es ebenfalls entfernt. Wenn diese signifikant sind, fällt das Trimmen herunter. Es hängt leicht von den tatsächlichen Daten ab. Siehe Antwort von user783322.
– Purpurtukan
16. März 2012 um 12:31 Uhr
Sprechen Sie im Klartext: “trim() entfernt aufeinanderfolgende Anführungszeichen vom Anfang oder vom Ende. Wir möchten jedoch nur die allerersten und allerletzten Anführungszeichen entfernen. Das heißt, dies sollte keine akzeptable Antwort sein.
– Scott Chu
7. Oktober 2015 um 8:48 Uhr
Es scheint das zu sein, was ich brauche, aber ich bin nicht derjenige, der danach gefragt hat.
– Michèle
2. Januar 2018 um 21:34 Uhr
Dies sollte nicht die akzeptierte Antwort sein. Was ist, wenn ein Anführungszeichen Teil der Zeichenfolge ist? "this is double-quote -> "" wird ausgegeben this is double-quote -> was bedeutet, dass Sie einen integralen Teil der Zeichenfolge verpasst haben.
– Forts
9. Juli 2018 um 10:01 Uhr
Steve Kammern
Ich hatte ein ähnliches Bedürfnis und schrieb eine Funktion, die führende und nachgestellte einfache oder doppelte Anführungszeichen aus einer Zeichenfolge entfernt:
/**
* Remove the first and last quote from a quoted string of text
*
* @param mixed $text
*/
function stripQuotes($text) {
return preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $text);
}
Dadurch werden die unten aufgeführten Ausgaben erzeugt:
Input text Output text
--------------------------------
No quotes => No quotes
"Double quoted" => Double quoted
'Single quoted' => Single quoted
"One of each' => "One of each'
"Multi""quotes" => Multi""quotes
'"'"@";'"*&^*'' => "'"@";'"*&^*'
Hier ist eine Möglichkeit, das erste und letzte Zeichen nur zu entfernen, wenn sie übereinstimmen:
$output=stripslashes(trim($myValue));
// if the first char is a " then remove it
if(strpos($output,'"')===0)$output=substr($output,1,(strlen($output)-1));
// if the last char is a " then remove it
if(strripos($output,'"')===(strlen($output)-1))$output=substr($output,0,-1);
So sehr dieser Thread schon vor langer Zeit hätte beendet werden sollen, ich konnte nicht anders, als mit der Antwort zu antworten, die ich als die einfachste Antwort von allen bezeichnen würde. Ich habe bemerkt, dass dieser Thread am 17. wieder aufgetaucht ist, also fühle ich mich nicht ganz so schlecht deswegen. 🙂
Verwendung von Beispielen wie von Steve Chambers bereitgestellt;
Input text Output text
--------------------------------
No quotes => No quotes
"Double quoted" => Double quoted
'Single quoted' => Single quoted
"One of each' => One of each
"Multi""quotes" => Multi""quotes
'"'"@";'"*&^*'' => "'"@";'"*&^*'
Dies entfernt immer nur das erste und letzte Zitat, es wiederholt sich nicht, um zusätzlichen Inhalt zu entfernen, und kümmert sich nicht um passende Enden.
Dies ist ein alter Beitrag, aber nur um Multibyte-Strings zu berücksichtigen, gibt es mindestens zwei mögliche Wege, denen man folgen kann. Ich gehe davon aus, dass das Anführungszeichen entfernt wird, weil das Anführungszeichen wie eine Programm- / INI-Variable betrachtet wird und daher ENTWEDER “etwas” oder “etwas anderes” ist, aber NICHT “gemischte Anführungszeichen”. Außerdem muss ALLES zwischen den übereinstimmenden Anführungszeichen sein intakt gehalten.
Route 1 – mit einer Regex
function sq_re($i) {
return preg_replace( '#^(\'|")(.*)\1$#isu', '$2', $i );
}
Dies verwendet \1, um den gleichen Typ Anführungszeichen zu finden, der am Anfang übereinstimmte. Der u-Modifikator macht es UTF8-fähig (okay, nicht vollständig Multibyte-Unterstützung)
Ich bekomme nicht das #^ am Anfang des Musters, # am Ende, sowie den Modifikator i. Ist ^(\’|”)(.*)\1$su nicht alles, was nötig ist, um die Frage zu beantworten?
– mach128x
4. April 2020 um 4:28 Uhr
Purpurtukan
Sie müssen reguläre Ausdrücke verwenden, schauen Sie sich an: –
Oder Sie könnten in diesem Fall substr verwenden, um zu prüfen, ob das erste und dann das letzte Zeichen der Zeichenfolge ein Anführungszeichen ist, falls dies der Fall ist, kürzen Sie die Zeichenfolge.
Ich bekomme nicht das #^ am Anfang des Musters, # am Ende, sowie den Modifikator i. Ist ^(\’|”)(.*)\1$su nicht alles, was nötig ist, um die Frage zu beantworten?
– mach128x
4. April 2020 um 4:28 Uhr
sakhunzai
Wie wäre es mit Regex
//$singleQuotedString="'Hello this 'someword' and \"somewrod\" stas's SO";
//$singleQuotedString="Hello this 'someword' and \"somewrod\" stas's SO'";
$singleQuotedString="'Hello this 'someword' and \"somewrod\" stas's SO'";
$quotesFreeString=preg_replace('/^\'?(.*?(?=\'?$))\'?$/','$1' ,$singleQuotedString);
Ausgabe
Hello this 'someword' and "somewrod" stas's SO
12976000cookie-checkEntfernen Sie Anführungszeichen vom Anfang und Ende der Zeichenfolge in PHPyes
Was tun bei
""Hello " World""
?– Madaras Geist
16. März 2012 um 11:04 Uhr
“”Hallo “Welt”” => “Hallo “Welt”
– Neuling
17. März 2012 um 6:23 Uhr
Ich bin mir nicht sicher, ob mir etwas fehlt, wenn ich all die komplexen regulären Ausdrücke sehe. Aber
preg_replace('/(^"|"$)/', '', '""Hello " World""')
kehrt zurück"Hello " World"
. Oder auch'/^"|"$/'
als Muster funktioniert auch.– Paul Spiegel
22. Februar 2020 um 19:11 Uhr