知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > PHP编程

php addslashes函数

发布时间:2015-05-27 19:29:26作者:知识屋

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又可以做双字节的低位。
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜