Home  >  Article  >  php教程  >  php addslashes函数

php addslashes函数

WBOY
WBOYOriginal
2016-06-13 10:54:481318browse

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

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

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又可以做双字节的低位。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn