一次在使用PHP的memcache-2.2.4模块访问mc时,不小心把含有tab的字符串做了key,在跟踪时发现我的key中出现tab的地方都成了“_”了,于是怀疑memcache-2.2.4对我的key做了处理了,于是看了memcache-2.2.4的源码,才发现如下函数,该函数里面将assii码小于空格的字符都要转换成“_”的。
int mmc_prepare_key_ex(const char *key, unsigned int key_len, char *result, unsigned int *result_len
TSRMLS_DC) /* {{{ */
{
unsigned int i;
if (key_len == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Key cannot be empty");
return MMC_REQUEST_FAILURE;
}
*result_len = key_len < MMC_KEY_MAX_SIZE ? key_len : MMC_KEY_MAX_SIZE;
result[*result_len] = ‘\0’;
for (i=0; i<*result_len; i++) {
result = ((unsigned char)key) > ‘ ‘ ? key : ‘_’;
}
return MMC_OK;
}