44 votes

Suppression des guillemets au début et à la fin d'une chaîne de caractères en PHP

J'ai des cordes comme celles-ci :

"my value1" => my value1
"my Value2" => my Value2
myvalue3 => myvalue3 

Je dois me débarrasser de " (guillemets doubles) à la fin et au début, s'ils existent, mais s'il y a ce type de caractère à l'intérieur de la chaîne, il doit être laissé là. Exemple :

"my " value1" => my " value1

Comment puis-je faire cela en PHP - existe-t-il une fonction pour cela ou dois-je le coder moi-même ?

1 votes

Que faire en cas de ""Hello " World"" ?

0 votes

""Hello " World"" => ""Hello " World""

0 votes

Je ne sais pas si je rate quelque chose, quand je vois toutes les expressions régulières complexes Mais preg_replace('/(^"|"$)/', '', '""Hello " World""') renvoie à "Hello " World" . Ou même '/^"|"$/' comme le modèle fonctionne aussi.

0voto

sakhunzai Points 2399

Qu'en est-il des 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);

Sortie

Hello this 'someword' and "somewrod" stas's SO

0voto

Purpletoucan Points 2137

Vous devez utiliser des expressions régulières, regardez:-

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

Ou vous pourriez, dans ce cas, utiliser substr pour vérifier si le premier puis le dernier caractère de la chaîne est un guillemet, et si c'est le cas, tronquer la chaîne.

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

0 votes

Vous n'êtes certainement pas necesita une expression régulière.

0 votes

Trim pourrait finir par supprimer des guillemets significatifs au début ou à la fin de la chaîne - je m'en tiens aux expressions rationnelles !

0 votes

En clair : "trim() supprime les guillemets consécutifs du début ou de la fin. Cependant, nous ne voulons supprimer que le premier et le dernier guillemets.

-1voto

Melo Waste Points 141

Si vous préférez la performance à la clarté, c'est la solution :

// Remove double quotes at beginning and/or end of output
$len=strlen($output);
if($output[0]==='"') $iniidx=1; else $iniidx=0;
if($output[$len-1]==='"') $endidx=-1; else $endidx=$len-1;
if($iniidx==1 || $endidx==-1) $output=substr($output,$iniidx,$endidx);

Le commentaire aide à la clarté... les parenthèses dans une utilisation de type tableau sur les chaînes de caractères est possible et demande moins d'effort de traitement que les méthodes équivalentes, dommage qu'il n'y ait pas une variable de longueur ou un index du dernier caractère.

0 votes

Je me rends compte que l'OP n'a pas posé la question des chaînes de caractères multioctets, mais cela ne fonctionnera pas avec de telles chaînes. Il n'est pas nécessaire d'utiliser une Regex, mais elles rendent les choses assez simples.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X