Solución:
La respuesta literal sería
trim($string,'"'); // double quotes
trim($string,''"'); // any combination of ' and "
Eliminará todas las comillas iniciales y finales de una cadena.
Si necesita eliminar estrictamente la primera y la última cita en caso de que existan, entonces podría ser una expresión regular como esta
preg_replace('~^"?(.*?)"?$~', '$1', $string); // double quotes
preg_replace('~^['"]?(.*?)['"]?$~', '$1', $string); // either ' or " whichever is found
Si necesita eliminar solo en caso de que la cita inicial y final estén estrictamente emparejadas, use la función de la respuesta de Steve Chambers
Sin embargo, si su objetivo es leer un valor de un archivo CSV, fgetcsv es la única opción correcta. Se ocupará de todos los casos extremos, eliminando también los recintos de valor.
Tenía una necesidad similar y escribí una función que eliminará las comillas simples o dobles iniciales y finales de una cadena:
/**
* Remove the first and last quote from a quoted string of text
*
* @param mixed $text
*/
function stripQuotes($text) {
return preg_replace('/^('(.*)'|"(.*)")$/', '$2$3', $text);
}
Esto producirá los resultados que se enumeran a continuación:
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
'"'"@";'"*&^*'' => "'"@";'"*&^*'
Demostración de expresiones regulares (que muestra lo que se está comparando / capturando): https://regex101.com/r/3otW7H/1
trim
eliminará todas las instancias del char desde el principio y el final si coincide con el patrón que proporcionaste, por lo que:
$myValue => '"Hi"""""';
$myValue=trim($myValue, '"');
Se convertirá:
$myValue => 'Hi'.
Aquí hay una forma de eliminar solo el primer y último carácter si coinciden:
$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);