php addslashes函数最终对应的c函数为:3244 PHPAPI char *php_addslashes_ex(char *str, int length, int *new_length, int should_free, int ignore_sybase TS RMLS_DC) 3245 {3246 /* maximum string length, worst case situation */ 3247 char *new_str;立即学习“PHP免费学习笔记(深入)
”;
3248 char *source, *target;3249 char *end;3250 int local_new_length;3251 3252 if (!new_length) {3253 new_length = &local_new_length;3254 }3255 if (!str) {3256 *new_length = 0;3257 return str;3258 }3259 new_str = (char *) safe_emalloc(2, (length ? length : (length = strlen(str))), 1);3260 source = str;3261 end = source + length;3262 target = new_str;3263 3264 if (!ignore_sybase && PG(magic_quotes_sybase)) {3265 while (source 3266 switch (*source) {3267 case ' ':3268 *target++ = '\';3269 *target++ = '0';3270 break;3271 case ''':3272 *target++ = ''';3273 *target++ = ''';3274 break;3275 default:3276 *target++ = *source;3277 break;3278 }PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载3279 source++;3280 }3281 } else {3282 while (source 3283 switch (*source) {3284 case ' ':3285 *target++ = '\';3286 *target++ = '0';3287 break;3288 case ''':3289 case '"':3290 case '\':3291 *target++ = '\';3292 /* break is missing *intentionally* */ 3293 default:3294 *target++ = *source;3295 break;3296 }3297 3298 source++;3299 }3300 }3301 3302 *target = 0;3303 *new_length = target - new_str;3304 if (should_free) {3305 STR_FREE(str);3306 }3307 new_str = (char *) erealloc(new_str, *new_length + 1);3308 return new_str;3309 }从上面看addslashes函数处理的是单字节的字节。
但是gbk编码是双字节的。而且5c又可以做双字节的低位。
