天道酬勤,学无止境

我应该对单引号使用 php 引号转义还是在数组中使用双引号?(Should I use php quote escapes for single quotes or use double quotes in arrays?)

问题

我意识到我可能会遇到 php 数组中的单引号问题:

<?php
$lang = array(
    'tagline' => 'Let's start your project',
    "h1" => "About Me"
);
?>

所以我把它改成了双引号:

<?php
$lang = array(
    "tagline" => "Let's start your project",
    "h1" => "About Me"
);
?>

我应该使用“php引号转义”,而不是我刚刚做的吗? (顺便说一下“php引号转义”怎么写?)

回答1

首先,有人会说单引号字符串比双引号字符串快; 您不应该关心这种微优化:它不会对您的应用程序产生任何影响。


单引号和双引号字符串之间的区别是:

  • 使用双引号字符串,有可变插值
  • 对于双引号字符串,您可以使用一些特殊字符,如\n\t 、...
  • 对于单引号字符串,您可以使用简单的引号进行转义。

作为参考,在 PHP 手册中:

  • 单引号
  • 双引号


我希望,在一般情况下,这主要是个人喜好的问题......

Personnaly,在您描述的情况下,我会像您一样使用双引号字符串:它使代码更易于编写和阅读,因为您不必转义该引号。

回答2

假设您不需要双引号特殊功能,请执行最易读的操作。 对我来说,这是使用字符串中出现最少的字符串的任何引号。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • PHP中的单引号和双引号字符串有什么区别?(What is the difference between single-quoted and double-quoted strings in PHP?)
    问题 我有些困惑,为什么我会在PHP中看到一些代码,这些代码的字符串用单引号引起来,有时用双引号引起来。 我只是在.NET或C语言中知道,如果用单引号引起来,则意味着它是一个字符,而不是字符串。 回答1 PHP字符串不仅可以通过两种方式指定,还可以通过四种方式指定。 用单引号引起来的字符串几乎可以完全“按原样”显示事物。 变量和大多数转义序列将不被解释。 唯一的例外是,要显示文字单引号,可以使用反斜杠\'对其进行转义,而要显示反斜杠,则可以使用另一个反斜杠\\对其进行转义(因此,即使对单引号的字符串也进行了解析)。 双引号字符串将显示许多转义字符(包括一些正则表达式),并将对字符串中的变量进行求值。 这里重要的一点是,您可以使用花括号来分隔要评估的变量的名称。 例如,假设您有变量$type并且想要echo "The $types are" 。 这将寻找变量$types 。 要解决此问题,请使用echo "The {$type}s are"您可以将左括号放在美元符号之前或之后。 看一看字符串解析,看看如何使用数组变量等。 Heredoc字符串语法的工作方式类似于双引号字符串。 它以<<<开头。 在此运算符之后,提供了一个标识符,然后提供了换行符。 字符串本身紧随其后,然后再次使用相同的标识符以关闭引号。 您无需使用此语法对引号进行转义。 Nowdoc(自PHP 5.3.0起
  • 如何在单引号和双引号PHP regex模式中正确地转义反斜杠以匹配文字反斜杠(How to properly escape a backslash to match a literal backslash in single-quoted and double-quoted PHP regex patterns)
    问题 为了匹配文字上的反斜杠,许多人和PHP手册都说:总是三重转义它,例如\\\\ 注意事项: 单引号和双引号的PHP字符串具有反斜杠的特殊含义。 因此,如果\必须与正则表达式\\匹配,则在PHP代码中必须使用"\\\\"或'\\\\' 。 这是一个示例字符串: \test $test = "\\test"; // outputs \test; // WON'T WORK: pattern in double-quotes double-escaped backslash #echo preg_replace("~\\\t~", '', $test); #output -> \test // WORKS: pattern in double-quotes with triple-escaped backslash #echo preg_replace("~\\\\t~", '', $test); #output -> est // WORKS: pattern in single-quotes with double-escaped backslash #echo preg_replace('~\\\t~', '', $test); #output -> est // WORKS: pattern in double-quotes with double-escaped
  • Ruby单引号和双引号(Ruby single and double quotes)
    问题 我最近一直在用Ruby进行编码,并且来自Python,据我所知,单引号和双引号对代码的工作方式没有影响。 我搬到Ruby,以了解它是如何工作的,并研究Ruby和Python之间的相似之处。 我曾经使用单引号字符串,并注意到了这一点: hello = 'hello' x = '#{hello} world!' puts x 它返回了'#{hello} world!' 而不是'hello world!' 。 注意到这一点后,我尝试使用双引号将问题解决。 现在我不确定为什么会这样。 单引号和双引号是否会更改此设置,还是因为我的编辑器(Sublime文字3)? 如果在以前的版本中工作方式有所不同,我还将使用Ruby 2.0版。 回答1 在Ruby中,双引号被插入,这意味着#{}的代码被评估为Ruby。 单引号被视为文字(表示不评估代码)。 var = "hello" "#{var} world" #=> "hello world" '#{var} world' #=> "#{var} world" 对于某些特殊的魔术,Ruby还提供了另一种创建字符串的方法: %Q() # behaves like double quotes %q() # behaves like single quotes 例如: %Q(#{var} world) #=> "hello world" %q(#
  • PHP中的'和'有什么区别?(What is the difference between ' and " in PHP? [duplicate])
    问题 这个问题已经在这里有了答案: 11年前关闭。 可能重复: PHP:不同的引号? 简单的问题: php中的'和'有什么区别?什么时候应该使用两者之一? 回答1 基本上,单引号字符串是纯文本,几乎没有特殊情况,而双引号字符串具有可变插值(例如echo "Hello $username"; )以及转义序列,例如“ \ n”(换行符)。 您可以在PHP的手册中了解有关字符串的更多信息。 回答2 在PHP <= 5.2中,有3种语法用于声明字符串: 单引号双引号 Heredoc 单引号: 特殊字符的变量和转义序列将不会扩展 例如 : echo 'Variables do not $expand $either'; 将输出: Variables do not $expand $either 用双引号: 双引号字符串的最重要特征是变量名将被扩展。 例如 : $a = 10; echo "a is $a"; 将输出: a is 10 并且,使用heredoc: Heredoc文本的行为就像双引号的字符串,没有双引号。 这意味着Heredoc中的引号不需要转义, 例如 : $a = 10; $b = 'hello'; $str = <<<END_STR a is $a and "b" is $b. END_STR; echo $str; 会给你: a is 10 and "b" is
  • PHP解析/语法错误; 以及如何解决它们(PHP parse/syntax errors; and how to solve them)
    问题 每个人都遇到语法错误。 即使是经验丰富的程序员也会打错字。 对于新手来说,这只是学习过程的一部分。 但是,通常很容易解释以下错误消息: PHP解析错误:语法错误,第20行的index.php中出现意外的'{' 意外的符号并不总是真正的罪魁祸首。 但是行号给出了从哪里开始寻找的粗略思路。 始终查看代码上下文。 语法错误通常隐藏在提到的代码行或以前的代码行中。 将您的代码与手册中的语法示例进行比较。 虽然并非每种情况都匹配。 但是,有一些常规步骤可以解决语法错误。 这些参考文献总结了常见的陷阱: 意外的T_STRING 意外的T_VARIABLE意外的'$ varname'(T_VARIABLE) 意外的T_CONSTANT_ENCAPSED_STRING意外的T_ENCAPSED_AND_WHITESPACE 意外的$ end 意外的T_FUNCTION… 意外{意外}意外(意外) 意外[意外] 意外的T_IF意外的T_FOREACH意外的T_FOR意外的T_WHILE意外的T_DO意外的T_PRINT意外的T_ECHO 意外的T_LNUMBER 出乎意料? 意外的继续(T_CONTINUE)意外的继续(T_BREAK)意外的继续(T_RETURN) 意外的'=' 意外的T_INLINE_HTML… 意外的T_PAAMAYIM_NEKUDOTAYIM… 意外的T_OBJECT
  • 变量串联的单引号还是双引号? [关闭](Single quotes or double quotes for variable concatenation? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 像这样将变量(例如$name )连接到现有字符串(例如$string )中是否更好: $string='Hi, my name is '.$name 或将变量嵌入到字符串中,如下所示: $string="Hi, my name is $name"; 还是使用像这样的函数更好: $string=sprintf("Hi, my name is %s",$name); 就处理器时间/效率而言,哪个更好? 回答1 进行测试的每个人都得出结论,使用单引号在性能上要好一点。 最后,单引号仅导致串联,而双引号则强制解释器解析变量的完整字符串。 但是,这样做对于最终版本的PHP来说增加的负担很小,以致在大多数情况下,结论是这并不重要。 因此,对于表演人员:请使用单引号。 对于“我喜欢我的代码可读的人”:Flavius Stef已经指出,双引号的可读性要好得多。 编辑:不过一件事-如果您要在字符串中使用一美元而不包含变量,请确保使用单引号! (http://www.weberdev.com/get_example-3750.html指出,解析这些字符串将花费4倍的时间) 回答2 PHP中单引号和双引号之间的区别在于,双引号是“智能的”
  • Javascript中单引号和双引号之间的区别(Difference between single quotes and double quotes in Javascript [duplicate])
    问题 这个问题已经在这里有了答案: 什么时候应该在JavaScript中使用双引号或单引号? (43个答案) 7年前关闭。 我知道在PHP中,双引号和单引号之间的唯一区别是字符串中变量的解释和转义符的处理。 在JavaScript中,我经常看到字符串中使用双引号。 是否有特定原因,还是单引号与双引号完全相同? 回答1 您将希望使用单引号,而您希望双引号出现在字符串内(例如html属性),而不必对其进行转义,反之亦然。 除此之外,没有任何区别。 但是,请注意,JSON(JavaScript对象表示法)仅支持双引号字符串。 回答2 JSON有区别-JSON标准指定所有键,值对均应使用双引号引起来。 (感谢评论中的wulfgarpro),因此我开始尽可能多地使用双引号,以便在处理JSON时不会出错。 回答3 绝对没有区别。 免费报价耶哈哈 回答4 与PHP不同,PHP使用双引号或单引号更改了字符串的解释方式,ECMAScript中的两种语法没有区别。 使用双引号的字符串与使用单引号的字符串完全相同。 但是请注意,以双引号开头的字符串必须以双引号结尾,以单引号开头的字符串必须以单引号结尾。 Nicholas C. Zakas-Web开发人员的专业JavaScript 回答5 它们是相同的,我通常使用单引号,但是那是因为我是.net开发人员,尤其是asp.net
  • 什么时候应该在JavaScript中使用双引号或单引号?(When should I use double or single quotes in JavaScript?)
    问题 console.log("double"); 与console.log('single'); 我看到越来越多的JavaScript库在处理字符串时使用单引号。 是什么原因导致一个人又一个人使用呢? 我认为它们几乎可以互换。 回答1 在不同的库中使用单一或双重的最可能原因是程序员的喜好和/或API一致性。 除了保持一致之外,请使用最适合该字符串的那个。 使用其他类型的引号作为文字: alert('Say "Hello"'); alert("Say 'Hello'"); 这可能会变得复杂: alert("It's \"game\" time."); alert('It\'s "game" time.'); ECMAScript 6中的另一个新选项是使用反引号字符的模板文字: alert(`Use "double" and 'single' quotes in the same string`); alert(`Escape the \` back-tick character and the \${ dollar-brace sequence in a string`); 模板文字为以下内容提供了一种简洁的语法:变量插值,多行字符串等等。 请注意,JSON已正式指定为使用双引号,这可能值得考虑,具体取决于系统要求。 回答2 如果要处理JSON,则应注意严格来说
  • fgetcsv / fputcsv $ escape参数从根本上破坏了(fgetcsv/fputcsv $escape parameter fundamentally broken)
    问题 概述 fgetcsv和fputcsv支持$escape参数,但是它已损坏,或者我不了解它应该如何工作。 忽略您没有在fputcsv上看到$escape参数的事实,PHP源中支持该参数,在文档中有一个小错误阻止它通过。 该函数还支持$delimiter和$enclosure参数,分别默认为逗号和双引号。 我希望应该传递$escape参数,以使字段包含那些元字符中的任何一个(反斜杠,逗号或双引号),但是事实并非如此。 (我现在通过阅读Wikipedia可以理解,这些都应该用双引号引起来)。 我尝试过的 例如, fgetcsv文档的注释部分中影响了众多张贴者的陷阱。 我们想在字段中写一个反斜杠的情况。 $r = fopen('/tmp/test.csv', 'w'); fwrite($r, '"\"'); fclose($r); $r = fopen('/tmp/test.csv', 'r'); var_dump(fgetcsv($r)); fclose($r); 这将返回false 。 我也尝试过"\\" ,但是也返回false 。 用一些模糊的文本填充反斜杠可以使fgetcsv获得所需的提升... "hi\\there"和"hi\there"都进行解析并具有相同的结果,但是结果只有1个反斜杠,所以这是什么$escape点的意义呢? 当不将反斜杠括在双引号中时,我观察到相同的行为
  • 在PHP中解析命令参数(Parsing command arguments in PHP)
    问题 是否有原生的“ PHP方式”来解析string命令参数? 例如,给定以下string : foo "bar \"baz\"" '\'quux\'' 我想创建以下array : array(3) { [0] => string(3) "foo" [1] => string(7) "bar "baz"" [2] => string(6) "'quux'" } 我已经尝试过使用token_get_all(),但是我的游行队伍几乎下雨了PHP的变量插值语法(例如"foo ${bar} baz" )。 我非常了解我可以编写自己的解析器。 命令参数语法非常简单,但是如果有一种现有的本机方式,我宁愿选择它而不是自己滚动。 编辑:请注意,我正在寻找从string而不是从shell /命令行解析参数的方法。 编辑2:以下是预期输入->输出参数的更全面的示例: foo -> foo "foo" -> foo 'foo' -> foo "foo'foo" -> foo'foo 'foo"foo' -> foo"foo "foo\"foo" -> foo"foo 'foo\'foo' -> foo'foo "foo\foo" -> foo\foo "foo\\foo" -> foo\foo "foo foo" -> foo foo 'foo foo' -> foo foo 回答1 正则表达式非常强大
  • PHP-连接或直接在字符串中插入变量(PHP - concatenate or directly insert variables in string)
    问题 我想知道,将PHP变量插入字符串的正确方法是什么? 这条路: echo "Welcome ".$name."!" 或者这样: echo "Welcome $name!" 这两种方法都可以在我的PHP v5.3.5 。 后者更短,更简单,但是我不确定第一种格式是否更好或是否被认为更合适。 回答1 在这两种语法之间,您应该真正选择一种您喜欢的语法:-) 就我个人而言,在这种情况下(可变插值) ,我会采用您的第二种解决方案,我发现它更容易写和读。 结果将是相同的; 即使有性能影响,也没关系1 。 作为旁注,所以我的回答更加完整:那天您要做这样的事情: echo "Welcome $names!"; PHP将解释您的代码,就像您尝试使用$names变量一样-该变量不存在。 -请注意,仅当您在字符串中使用“”而不是“”时,它才有效。 那天,您需要使用{} : echo "Welcome {$name}s!" 无需回退到串联。 另请注意,您的第一个语法: echo "Welcome ".$name."!"; 可以使用以下方法进行优化,避免串联: echo "Welcome ", $name, "!"; (但是,正如我之前说的,这无关紧要...) 1-除非您要进行成千上万的级联与插值运算-事实并非如此。 回答2 用双引号引起来的字符串更为优雅,因为您不必每次都需要插入变量时就将其分解
  • 在echo语句中混合html和php变量(Mixing html and php variables inside an echo statement)
    问题 这可能是我在一个语句中使用单引号和双引号引起的麻烦。 但是我有这段代码: echo '<form> <input type="submit" value="$number" onClick="function();"> </form>' 这样做的问题是,提交按钮显示的是短语$number而不是该变量的值。 所以我环顾四周,找到了这个解决方案: echo "<form> <input type='submit' value='$number' onClick='function();'> </form> 这样可以正确输出$ number的值,但是我习惯于在echo语句周围使用单引号,并希望保持这种方式。 为什么只将所有单引号转换为双引号,然后将双引号转换为单引号可以解决此问题? 并且对代码的第一位进行了修改,使我可以在echo上保留单引号,而在属性上保留双引号吗? 回答1 在PHP中,会自动分析其中包含的任何变量的双引号字符串,但不会自动分析单引号字符串。 所以: $myVar = 21; echo "myVar: $myVar" 输出文本: myVar: 21 然而: $myVar = 21; echo 'myVar: $myVar' 这将输出文本: myVar: $myVar 代码的一个问题是,在HTML中,元素属性的值必须用双引号而不是单引号引起来。
  • jQuery.parseJSON由于JSON中的单引号转义而引发“无效JSON”错误(jQuery.parseJSON throws “Invalid JSON” error due to escaped single quote in JSON)
    问题 我正在使用jQuery.post()向服务器发出请求,并且服务器正在返回JSON对象(例如{ "var": "value", ... } )。 但是,如果任何值包含一个单引号(正确地转义为\' ),则jQuery无法解析其他有效的JSON字符串。 这是我的意思的示例(在Chrome的控制台中完成): data = "{ \"status\": \"success\", \"newHtml\": \"Hello \\\'x\" }"; eval("x = " + data); // { newHtml: "Hello 'x", status: "success" } $.parseJSON(data); // Invalid JSON: { "status": "success", "newHtml": "Hello \'x" } 这正常吗? 没有办法通过JSON正确传递单引号吗? 回答1 根据JSON网站上的状态机图,仅允许转义的双引号字符,不允许单引号。 单引号字符不需要转义: 更新-有兴趣者的更多信息: Douglas Crockford没有具体说明为什么JSON规范不允许在字符串中使用转义的单引号。 但是,在他的JavaScript附录E:好的部分中对JSON的讨论中,他写道: JSON的设计目标是最小化,可移植,文本化以及JavaScript的子集。
  • 在批处理脚本中转义双引号(Escaping Double Quotes in Batch Script)
    问题 我将如何用转义的双引号替换批处理文件参数中的所有双引号? 这是我当前的批处理文件,它将在字符串中扩展其所有命令行参数: @echo off call bash --verbose -c "g++-linux-4.1 %*" 然后,它使用该字符串调用Cygwin的bash,执行Linux交叉编译器。 不幸的是,我将这样的参数传递到我的批处理文件中: "launch-linux-g++.bat" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -DNDEBUG -c -o "C:\Users\Me\Documents\Testing\SparseLib\bin\Win32\LinuxRelease\hello.o" "c:\Users\Me\Documents\Testing\SparseLib\SparseLib\hello.cpp" 传入的第一个路径周围的第一个引号过早地结束了要传递给GCC的字符串,并将其余参数直接传递给bash(这很失败)。 我想如果可以将参数连接成单个字符串,然后转义引号就可以了,但是我很难确定如何做到这一点。 有人知道吗? 回答1 批处理脚本中的转义字符是^ 。 但是对于双引号字符串,请双引号: "string with an embedded "" character"
  • PHP-如何创建换行符?(PHP - how to create a newline character?)
    问题 在PHP中,我试图创建一个换行符: echo $clientid; echo ' '; echo $lastname; echo ' '; echo '\r\n'; 之后,我在记事本中打开创建的文件,它按字面意义写换行符: 1 John Doe \ r \ n 1 John Doe \ r \ n 1 John Doe \ r \ n 我已经尝试了\r\n许多变体,但是没有任何效果。 为什么换行符不变成换行符? 回答1 只有双引号的字符串将转义序列\r和\n分别解释为'0x0D'和'0x0A',因此,您需要: "\r\n" 另一方面,单引号字符串只知道转义序列\\和\' 。 因此,除非您将单引号字符串与在其他位置生成的换行符连接起来(例如,使用双引号字符串"\r\n"或使用chr函数chr(0x0D).chr(0x0A) ),否则,只有一行用单引号引起来的字符串的中断是使用编辑器按字面值键入: $s = 'some text before the line break some text after'; 如果需要某些特定的字符序列(例如\r\n ),请确保检查编辑器的换行设置。 回答2 使用预定义的PHP_EOL常量: echo $clientid, ' ', $lastname, PHP_EOL; 常量值将根据正在执行PHP的操作系统的行尾设置。 在Linux上,它将是"
  • Shell参考
    菜鸟教程–Shell教程 运行 Shell 脚本有两种方法 作为可执行程序 代码保存为 test.sh,并 cd 到相应目录: chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 作为解释器参数 直接运行解释器,其参数就是 shell 脚本的文件名: /bin/sh test.sh /bin/php test.php Shell 注释 以"#"开头的行就是注释,会被解释器忽略。 sh里没有多行注释,只能每一行加一个#号。 Shell 变量 变量命名赋值 命名规则与java一致。 变量名、等号、值之间不能有空格。其他命令间,均用空格隔开。 a=1; 使用变量 在变量名前面加$,使用定义过的变量。 name=yun echo $name #输出yun echo ${name} #推荐加{},帮助解释器识别变量边界 name=lin; #再次给变量赋值,不需使用$符号。 只读变量 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 a=1; readonly a; #只读 a=2; #报错 删除变量 使用 unset 命令可以删除变量。语法: unset a #删除变量 变量被删除后不能再次使用。unset 命令不能删除只读变量。 变量类型 运行shell时,会同时存在三种变量: 局部变量 局部变量在脚本或命令中定义
  • 如何在构建JSON字符串时转义特殊字符?(How to escape special characters in building a JSON string?)
    问题 这是我的绳子 { 'user': { 'name': 'abc', 'fx': { 'message': { 'color': 'red' }, 'user': { 'color': 'blue' } } }, 'timestamp': '2013-10-04T08: 10: 41+0100', 'message': 'I'mABC..', 'nanotime': '19993363098581330' } 此处,消息包含单引号,与JSON中使用的引号相同。 我要做的是从用户输入(例如消息)中填充一个字符串。 因此,我需要避免那些破坏代码的特殊情况。 但是,除了字符串替换之外,还有什么方法可以使它们转义,但仍然允许HTML将其处理回正确的消息? 回答1 根据规范,JSON字符串必须双引号,因此您无需转义' 。 如果必须在JSON字符串中使用特殊字符,则可以使用\字符对其进行转义。 请参阅此JSON中使用的特殊字符列表: \b Backspace (ascii code 08) \f Form feed (ascii code 0C) \n New line \r Carriage return \t Tab \" Double quote \\ Backslash character 但是,即使完全违反规范,作者也可以使用\' 。 这很糟糕,因为:
  • 如何在Bash参数中保留引号? [复制](How to keep quotes in Bash arguments? [duplicate])
    问题 这个问题已经在这里有了答案: 在bash参数中保留引号(6个答案) 1年前关闭。 我有一个Bash脚本,我想在其中传递引号。 例子: ./test.sh this is "some test" 那么我想使用这些参数,然后重新使用它们,包括引号和整个参数列表周围的引号。 我尝试使用\"$@\" ,但这会删除列表中的引号。 我该如何完成? 回答1 只需在字符串的双引号周围加上单引号即可: ./test.sh this is '"some test"' 因此,单引号内的双引号也被解释为字符串。 但是我建议将整个字符串放在单引号之间: ./test.sh 'this is "some test" ' 为了了解外壳程序正在做什么,或者更确切地说是解释脚本中的参数,您可以编写一个像这样的小脚本: #!/bin/bash echo $@ echo "$@" 然后,您将看到并测试,调用具有不同字符串的脚本时发生了什么 回答2 使用"$@"会将参数替换为列表,而无需在空格上将它们重新分割(在调用shell脚本时它们被分割了一次),这通常正是您想要重新传递参数时要的到另一个程序。 请注意,这是一种特殊形式,只有完全以这种方式出现时,才被识别为特殊形式。 如果在引号中添加其他内容,则结果将合并为一个参数。 您正在尝试做什么,并且以什么方式行不通? 回答3
  • PHP的json_encode不会转义所有JSON控制字符(PHP's json_encode does not escape all JSON control characters)
    问题 有什么原因导致PHP的json_encode函数无法对字符串中的所有JSON控制字符进行转义? 例如,让我们采用一个跨越两行并包含控制字符(\ r \ n“ / \)的字符串: <?php $s = <<<END First row. Second row w/ "double quotes" and backslash: \. END; $s = json_encode($s); echo $s; // Will output: "First row.\r\nSecond row w\/ \"double quotes\" and backslash: \\." ?> 请注意,回车符和换行符不转义。 为什么? 我使用jQuery作为我的JS库,当您完全100%信任传入的数据时,它的$ .getJSON()函数会很好用。 否则我会像其他人一样使用JSON.org的库json2.js。 但是,如果您尝试解析该编码字符串,则会引发错误: <script type="text/javascript"> JSON.parse(<?php echo $s ?>); // Will throw SyntaxError </script> 而且您无法获取数据! 如果您在该字符串中删除或转义\ r \ n“和\,则JSON.parse()不会引发错误。 是否有任何现有的
  • BUUCTF 2018 Online Tool(escapeshellarg和escapeshellcmd使用不当导致rce)
    参考: 谈谈escapeshellarg参数绕过和注入的问题 PHP escapeshellarg()和escapeshellcmd()并用之殇 谈escapeshellarg绕过与参数注入漏洞 https://blog.csdn.net/qq_26406447/article/details/100711933 进入题目显示php源码: 这里用到escapeshellarg()、escapeshellcmd()两个函数: escapeshellarg: escapeshellarg() 将给字符串增加一个 单引号 并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 命令执行函数,并且还是确保安全的。shell 命令执行函数包含 exec(), system() 执行运算符 (反引号)。如举例: <?php $a="172.17.0.2' -v -d a=1"; $b=escapeshellarg($a); echo $a."<br/>".$b."<br/>"; ?> 输出 172.17.0.2' -v -d a=1 '172.17.0.2'\'' -v -d a=1' 经过escapeshellargs()处理后成为 '172.17.0.2'\' ' -v -d a=1'' 即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。