【问题标题】:php: string is double-quoted, not single-quoted. How to fix?php: 字符串是双引号,不是单引号。怎么修?
【发布时间】:2017-01-28 16:43:43
【问题描述】:

我在问this SO question php: split string into 3 parts... 并得到了很好的答案。但是,我遇到了一个问题。问题是要处理的双引号字符串。因此,当$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)

但这无济于事。 任何想法如何面对这个问题?

【问题讨论】:

  • 有什么理由拒绝投票吗? Downvoter,你能解释一下为什么吗?谢谢。
  • $str = _POST['source']; 我没有抓住这里。你为什么要故意从超全局中删除$
  • 这是一个错字。更新。谢谢。
  • 不,它工作得很好。
  • $str = $_POST['source']; 将为您提供值:$abc$$$ 并且不是双引号(只有当您自己在代码中编写字符串时,引号才重要)。我认为您的错误是别的地方。你在哪一行得到这个错误?

标签: php string http-post double-quotes


【解决方案1】:

它工作得很好。 是您的测试导致了问题。

改为这样做

$_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 代码中完成的。

【讨论】:

  • 这将是他们在问题stackoverflow.com/questions/2557834/… 中发布的内容的副本stackoverflow.com/a/2557845/1415724
  • 理论上当然。如果您在此处发布的内容无法解决问题,那么其他事情正在使他们失败。他们没有发布的是预期的结果。
  • @RiggsFolly,你是对的,但它来自前端的双引号。它来自带有jQuery .text() 方法的textarea。我没有找到如何传递给后端单引号字符串(使用 javascript),也没有找到如何使用 php 在后端“转换”接收到的双引号字符串。
  • 不,它没有。它是一个字符串文字。它可能会在 var_dump 或 Print_r 中用双引号显示给您。但它不是那样来的,它只是在转储中显示出来
  • 请记住,字符串只是内存位置中的一组字节,其起始地址和结尾是\0。数据中没有单引号或双引号之类的东西
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 2011-03-27
相关资源
最近更新 更多