addcslashes

(PHP 4, PHP 5, PHP 7, PHP 8)

addcslashes用斜杠在 C 风格中引用字符串

描述

addcslashes(string $string, string $characters): string

返回一个字符串,在 characters 参数中列出的字符之前添加反斜杠。

参数

string

要转义的字符串。

characters

要转义的字符列表。如果 characters 包含字符 \n\r 等,则它们将转换为 C 风格,而其他 ASCII 代码小于 32 且大于 126 的非字母数字字符将转换为八进制表示。

characters 参数中定义一系列字符时,请确保您知道设置的范围开始和结束字符之间的字符。

<?php
echo addcslashes('foo[ ]', 'A..z');
// 输出:\f\o\o\[ \]
// 所有大写和小写字母都将被转义
// ... 但 [\]^_` 也会被转义
?>
此外,如果范围中的第一个字符的 ASCII 值大于范围中的第二个字符的 ASCII 值,则不会构建任何范围。只有开始、结束和句点字符将被转义。使用 ord() 函数查找字符的 ASCII 值。
<?php
echo addcslashes("zoo['.']", 'z..A');
// 输出:\zoo['\.']
?>

如果您选择转义字符 0、a、b、f、n、r、t 和 v,请小心。它们将转换为 \0、\a、\b、\f、\n、\r、\t 和 \v,所有这些都是 C 中的预定义转义序列。许多这些序列也在其他 C 派生语言中定义,包括 PHP,这意味着如果您使用 addcslashes() 的输出在这些语言中生成代码,而这些语言在 characters 中定义了这些字符,则您可能无法获得预期的结果。

返回值

返回转义后的字符串。

示例

characters 如 "\0..\37",这将转义所有 ASCII 代码介于 0 和 31 之间的字符。

示例 #1 addcslashes() 示例

<?php
$escaped
= addcslashes($not_escaped, "\0..\37!@\177..\377");
?>

参见

添加备注

用户贡献备注 6 则备注

7
phpcoder at cyberpimp dot pimpdomain dot com
19 年前
如果您使用 addcslashes() 来编码稍后要解码回其原始形式的文本,则必须在 charlist 中指定反斜杠 (\) 字符!

示例

<?php
$originaltext
= 'This text does NOT contain \\n a new-line!';
$encoded = addcslashes($originaltext, '\\');
$decoded = stripcslashes($encoded);
//$decoded 现在包含 $originaltext 的副本,具有完美的完整性
echo $decoded; // 显示带文字 \n 的句子
?>

如果没有在 addcslashes() 中指定 '\\',则 $originaltext 中的任何文字 \n(或其他 C 风格特殊字符)序列将通过未编码,但随后会通过 stripcslashes() 解码为控制字符,并且数据将在编码 - 解码事务中丢失完整性。
4
stein at visibone dot com
16 年前
addcslashes() 将 NUL 视为字符串终止符

assert("any" === addcslashes("any\0body", "-"));

除非您将其排序为反斜杠化

assert("any\\000body" === addcslashes("any\0body", "\0"));

(不确定这是否应该被声明为错误,或者只是 addcslashes() 不是二进制安全的,无论这意味着什么。)
1
natNOSPAM at noworrie dot NO_SPAM dot com
22 年前
我发现以下代码示例更合适

<?php
$escaped
= addcslashes($not_escaped, "\0..\37!@\@\177..\377");
?>

这将保护原始的、无辜的反斜杠不受 stripcslashes 的影响。
-1
glitchmr at myopera dot com
11 年前
如果您需要 JS 转义函数,请使用 json_encode() 代替。
-4
vishal dot ceeng at gmail dot com
5 年前
echo addcslashes("zoo['.']", 'z..A');

上面的代码将创建以下错误

无效的 '..' 范围,'..' 范围需要递增 -
-6
Johannes
16 年前
在将 \ 添加到编码字符列表时要小心。当您将其添加到最后一个位置时,它会编码所有编码斜杠。我因这个错误而得到了很多 \\\。

因此,始终先编码 \。
To Top