Entfernen Sie Anführungszeichen vom Anfang und Ende der Zeichenfolge in PHP

Lesezeit: 6 Minuten

Benutzer-Avatar
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


Benutzer-Avatar
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


Benutzer-Avatar
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
'"'"@";'"*&^*'' => "'"@";'"*&^*'

Regex-Demo (zeigt, was abgeglichen/erfasst wird): https://regex101.com/r/3otW7H/1

Benutzer-Avatar
Benutzer783322

trim entfernt alle Instanzen des Zeichens vom Anfang und Ende, wenn es mit dem von Ihnen angegebenen Muster übereinstimmt, also:

$myValue => '"Hi"""""';
$myValue=trim($myValue, '"');

Wird werden:

$myValue => 'Hi'.

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;

echo preg_replace('/(^[\"\']|[\"\']$)/', '', $input);

Ausgabe unten;

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)

Route 2 – mit mb_*-Funktionen

function sq($i) {
    $f = mb_substr($i, 0, 1);
    $l = mb_substr($i, -1);
    if (($f == $l) && (($f == '"') || ($f == '\'')) ) $i = mb_substr($i, 1, mb_strlen( $i ) - 2);
    return $i;
}

  • 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

Benutzer-Avatar
Purpurtukan

Sie müssen reguläre Ausdrücke verwenden, schauen Sie sich an: –

http://php.net/manual/en/function.preg-replace.php

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.

http://php.net/manual/en/function.substr.php

  • 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

Benutzer-Avatar
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   

1297600cookie-checkEntfernen Sie Anführungszeichen vom Anfang und Ende der Zeichenfolge in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy