我有这样的字符串:
"my value1" => my value1
"my Value2" => my Value2
myvalue3 => myvalue3
我需要最后摆脱"
(双引号)并开始,如果这些存在,但如果在String中有这种字符,那么它应该留在那里。例如:
"my " value1" => my " value1
我如何在PHP中执行此操作 - 是否有此功能或我是否必须自己编写代码?
答案 0 :(得分:83)
trim($string,'"');
答案 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来检查字符串的第一个字符和最后一个字符是否为引号,如果是,则截断字符串。
答案 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索引