2024 年 PHP 大会日本站

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 值高于范围中的第二个字符,则不会构造范围。只有起始、结束和句点字符将被转义。使用 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");
?>

参见

添加注释

用户贡献的注释 3 条注释

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() 解码为控制字符,并且数据将通过编码-解码事务丢失其完整性。
stein at visibone dot com
17 年前
addcslashes() 将 NUL 视为字符串终止符

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

除非您将其反斜杠化

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

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

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

这将保护原始的、无辜的反斜杠不被 stripcslashes 破坏。
To Top