当前位置:编程学习 > php >>

php addslashes函数

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;
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 < end) {
3266             switch (*source) {
3267                 case '\0':
3268                     *target++ = '\\';
3269                     *target++ = '0';
3270                     break;
3271                 case '\'':
3272                     *target++ = '\'';
3273                     *target++ = '\'';
3274                     break;
3275                 default:
3276                     *target++ = *source;
3277                     break;
3278             }
3279             source++;
3280         }
3281     } else {
3282         while (source < end) {
3283             switch (*source) {
3284                 case '\0':
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又可以做双字节的低位。
补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,