php:字符串是双引号,不是单引号。怎么修?
php: string is double-quoted, not single-quoted. How to fix?
我问 并得到了很好的答案。但是,我遇到了一个问题。问题是要处理的双引号字符串。因此,当 $
sign 在字符串中时,它在一种情况下无法按预期工作。
$str = $_POST['source'];//comes double-quoted, example: "$abc$";
这样,上述问题的答案代码为:
<?php
$str = "$abc$$$";//comes from _POST['source'];
preg_match('/^([^\w]*)(\w+.*\w+)?([^\w]*)$/iu', $str, $matches);
$parts = array_slice($matches, 1);
print_r($parts);
?>
不起作用并导致 E_NOTICE : type 8 -- Undefined variable:
据我发现,问题是 "$abc$$$"
是双引号,而不是单引号。这导致 $ 被视为变量:SO: Dollar ($) sign in password string treated as variable
我试过了
$str = $_POST['source'];
$str = (string)$str;// I hoped to convert "$abc$$$" to '$abc$$$' (to make single-quoted)
但这无济于事。
有什么想法可以解决这个问题吗?
它工作得很好。 是您的测试导致了问题。
改为这样做
$_POST['source'] = '$abc$$$';
$str = $_POST['source'];
preg_match('/^([^\w]*)(\w+.*\w+)?([^\w]*)$/iu', $str, $matches);
$parts = array_slice($matches, 1);
print_r($parts);
结果
Array
(
[0] => $
[1] => abc
[2] => $$$
)
附加示例
看看这个简单的测试。我使用单引号字符串加载变量,var_dump 将其显示为双引号字符串。
$test = '$var';
var_dump($test);
结果
string(4) "$var"
这就是转储函数决定显示字符串的方式,字符串没有被更改
只有当您在 PHP 本身中使用 $
使用双引号字符串文字创建字符串变量时,才会发生此变量扩展。这是 PHP 所做的事情,与双引号文字无关。
所以这个
$test = "$var";
如果$var
不存在会报错,如果存在则展开。但只是因为它是在 PHP 代码中完成的。
我问 $
sign 在字符串中时,它在一种情况下无法按预期工作。
$str = $_POST['source'];//comes double-quoted, example: "$abc$";
这样,上述问题的答案代码为:
<?php
$str = "$abc$$$";//comes from _POST['source'];
preg_match('/^([^\w]*)(\w+.*\w+)?([^\w]*)$/iu', $str, $matches);
$parts = array_slice($matches, 1);
print_r($parts);
?>
不起作用并导致 E_NOTICE : type 8 -- Undefined variable:
据我发现,问题是 "$abc$$$"
是双引号,而不是单引号。这导致 $ 被视为变量:SO: Dollar ($) sign in password string treated as variable
我试过了
$str = $_POST['source'];
$str = (string)$str;// I hoped to convert "$abc$$$" to '$abc$$$' (to make single-quoted)
但这无济于事。 有什么想法可以解决这个问题吗?
它工作得很好。 是您的测试导致了问题。
改为这样做
$_POST['source'] = '$abc$$$';
$str = $_POST['source'];
preg_match('/^([^\w]*)(\w+.*\w+)?([^\w]*)$/iu', $str, $matches);
$parts = array_slice($matches, 1);
print_r($parts);
结果
Array
(
[0] => $
[1] => abc
[2] => $$$
)
附加示例
看看这个简单的测试。我使用单引号字符串加载变量,var_dump 将其显示为双引号字符串。
$test = '$var';
var_dump($test);
结果
string(4) "$var"
这就是转储函数决定显示字符串的方式,字符串没有被更改
只有当您在 PHP 本身中使用 $
使用双引号字符串文字创建字符串变量时,才会发生此变量扩展。这是 PHP 所做的事情,与双引号文字无关。
所以这个
$test = "$var";
如果$var
不存在会报错,如果存在则展开。但只是因为它是在 PHP 代码中完成的。