从PHP中的字符串的开头和结尾删除引号

时间:2012-03-16 09:32:27

标签: php string

我有这样的字符串:

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

我需要最后摆脱"(双引号)并开始,如果这些存在,但如果在String中有这种字符,那么它应该留在那里。例如:

"my " value1" => my " value1

我如何在PHP中执行此操作 - 是否有此功能或我是否必须自己编写代码?

8 个答案:

答案 0 :(得分:83)

trim($string,'"');

here is the source

答案 1 :(得分:11)

我有类似的需求并编写了一个函数,它将从字符串中删除前导和尾随的单引号或双引号:

/**
* Remove first and end quote from a quoted string of text
*
* @param mixed $text
*/
function stripQuotes($text) {
  return preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $text);
} 

这将产生下列输出:

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

答案 2 :(得分:7)

如果匹配您提供的模式,

trim将从开头和结尾删除所有char实例,因此:

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

将成为:

$myValue => 'Hi'.

这是一种只在匹配时删除第一个和最后一个字符的方法:

$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);

答案 3 :(得分:3)

尽管这个帖子应该很久以前就已经被杀了,但我无法帮助回应我所谓的最简单的答案。我注意到这个帖子在17日重新出现,所以我不觉得这个很糟糕。 :)

使用Steve Chambers提供的样本;

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

以下输出;

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

这只删除了第一个和最后一个引用,它不会重复删除额外的内容,也不关心匹配结束。

答案 4 :(得分:0)

您需要使用正则表达式,请查看: -

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

或者,在这种情况下,您可以使用substr来检查字符串的第一个字符和最后一个字符是否为引号,如果是,则截断字符串。

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

答案 5 :(得分:0)

正则表达式

//$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);

输出

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

答案 6 :(得分:0)

这是一个旧帖子,但只是为了满足多字节字符串,至少有两条可能的路由可以遵循。我假设引用剥离正在进行,因为引用被认为是一个程序/ INI变量,因此是“某事”或“somethingelse”而不是“混合引号”。此外,匹配的引号之间的任何一个都是保持完整。
路线1 - 使用正则表达式

RewriteEngine On
RewriteCond %{HTTP_HOST} ^oldsite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.oldsite.com [NC]
RewriteCond %{REQUEST_URI} !/wp-login.php
RewriteRule ^(.*)$ http://newsite.com/$1 [L,R=301,NC]

这使用\ 1来匹配开头匹配的相同类型引用。 u修饰符,使其具有UTF8能力(好吧,不是完全多字节支持)


路线2 - 使用mb_ *功能

function sq_re($i) {
    return preg_replace( '#^(\'|")(.*)\1$#isu', '$2', $i );
}

答案 7 :(得分:-1)

如果你喜欢表现超过清晰度,那就是这样:

// 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);

评论有助于澄清...... 字符串中类似于数组的括号是可能的,并且比同等方法需要更少的处理工作,太糟糕了,没有长度变量或最后一个char索引