php比较字符串的问题,求大侠指教 php 比较字符串 是否用二进制安全的更可靠, 在看一些开源的东西经常看到进行二进制安全的比较 比如说 strncmp,srtrcmp等为何要进行二进制安全的去比较,是否用二进制安全的更可靠求大侠指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同求高人解答。个人感觉php里面如果不直接操作二进制文件和套接字的话,用不到二进制安全的东西。 我觉得php的字符串在内存里保存的时候就是二进制,而不像一些平台语言(比如.NET JAVA等)会对它进行字符集处理。因此php里二进制安全是很模糊的。 这个问题问的...计算机就认二进制码,转化为十进制或字符串是为了人能读而不是计算机,你认为if('a' == 'a')与if(ord('a') == ord('a'))在计算机内部运行会有什么区别吗? 比较字符串,除了相等还有大于和等于的情况。strcmp是沿袭C语言中的函数。比较结果可以返回大小关系(或是否相等关系)至于是否是二进制安全,感觉完全扯淡。。像斑竹说的: ZEND_API int zend_binary_strncmp(const char *s1, uint len1, const char *s2, uint len2, uint length) /* {{{ */{ int retval; retval = memcmp(s1, s2, MIN(length, MIN(len1, len2))); if (!retval) { return (MIN(length, len1) - MIN(length, len2)); } else { return retval; }}/* }}} *//* {{{ proto int strncmp(string str1, string str2, int len) Binary safe string comparison */ZEND_FUNCTION(strncmp){ char *s1, *s2; int s1_len, s2_len; long len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssl", &s1, &s1_len, &s2, &s2_len, &len) == FAILURE) { return; } if (len < 0) { zend_error(E_WARNING, "Length must be greater than or equal to 0"); RETURN_FALSE; } RETURN_LONG(zend_binary_strncmp(s1, s1_len, s2, s2_len, len));}/* }}} */ retval = memcmp(s1, s2, MIN(length, MIN(len1, len2)));可以看到,php的strncmp函数实际上是去调用c语言的memcmp函数来进行的比较。4楼的意思貌似是其他语言会对不同字符集的字符串进行字符集统一后再进行比较。php的大部分函数都是沿用c的。c语言的编译器已经处理了不同字符集的问题。所以php不必操心这个。内容相同会被c语言编译器处理为相同字符集后再放到内存中进行二进制比较。 高手进 sql注入失败! 在线答题系统的数据库表设计 大家好,PHP如何能够高效的处理XML文件,替换掉想要替换的部分节点或属性,谢谢! 为什么提示我至少要php4但是我的版本已经是php5了 php 正则表达式的问题. flash显示问题 pecl安装VLD错误,求解救 求PHP网站源代码下载 刚学php,请高手指教! 请问怎么读取BMP文件 字符串替换的问题! 这个正则帮解释一下!
if('a' == 'a')
与
if(ord('a') == ord('a'))
在计算机内部运行会有什么区别吗?
strcmp是沿袭C语言中的函数。
比较结果可以返回大小关系(或是否相等关系)
至于是否是二进制安全,感觉完全扯淡。。像斑竹说的:
ZEND_API int zend_binary_strncmp(const char *s1, uint len1, const char *s2, uint len2, uint length) /* {{{ */
{
int retval; retval = memcmp(s1, s2, MIN(length, MIN(len1, len2)));
if (!retval) {
return (MIN(length, len1) - MIN(length, len2));
} else {
return retval;
}
}
/* }}} *//* {{{ proto int strncmp(string str1, string str2, int len)
Binary safe string comparison */
ZEND_FUNCTION(strncmp)
{
char *s1, *s2;
int s1_len, s2_len;
long len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssl", &s1, &s1_len, &s2, &s2_len, &len) == FAILURE) {
return;
} if (len < 0) {
zend_error(E_WARNING, "Length must be greater than or equal to 0");
RETURN_FALSE;
} RETURN_LONG(zend_binary_strncmp(s1, s1_len, s2, s2_len, len));
}
/* }}} */
可以看到,php的strncmp函数实际上是去调用c语言的memcmp函数来进行的比较。
4楼的意思貌似是其他语言会对不同字符集的字符串进行字符集统一后再进行比较。php的大部分函数都是沿用c的。c语言的编译器已经处理了不同字符集的问题。所以php不必操心这个。内容相同会被c语言编译器处理为相同字符集后再放到内存中进行二进制比较。