假设在PHP中使用UTF-8编码和strlen(),这个字符串的长度是4吗?
我只想知道strlen(),而不是其他函数
这是字符串:$1�2
我在自己的计算机上测试过,我已经验证了UTF-8编码,我得到的答案是6.
我在strlen手册或者我在UTF-8上读过的任何内容中都没有看到任何可以解释为什么上面的一些字符会少于一个的原因.
PS:这个问题和答案(4)来自我在Ebay上购买的ZCE的模拟测试.
PPS:请给我一个骨头并投票.我做了我的功课.提前感谢所有回复和投票.
我试图获得这个unicode字符串的长度
$text = '??? ????? ?';
$length = strlen($text);
echo $length;
Run Code Online (Sandbox Code Playgroud)
产量
20
Run Code Online (Sandbox Code Playgroud)
它如何确定unicode字符串的长度?
昨天我在面试时被要求在C中实现strlen()而不使用任何标准函数,所有这些都是手工完成的.作为一个绝对的业余爱好者,我用while循环实现了原始版本.看看这个,我的面试官说它可以只用一行代码实现.我当时无法使用该术语生成此代码.在采访之后,我问了我的同事们,他们中最有经验的人给了我这件真的很好的作品:
size_t str_len (const char *str)
{
return (*str) ? str_len(++str) + 1 : 0;
}
Run Code Online (Sandbox Code Playgroud)
所以有一个问题,是否可以不使用递归,如果是,如何?条款:
请注意,这不是优化或实际使用的问题,只是完成任务的可能性.
我正在查看其他人写过的表格验证码,我看到了这个:
strlen() == 0
Run Code Online (Sandbox Code Playgroud)
在测试表单变量是否为空时,我使用该empty()函数.有一种方式比另一种更好吗?它们在功能上是否相同?
这是一个多功能问题:
随机填充垃圾,因为stackoverflow以某种方式比我更了解代码到汇总比率
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <stdbool.h>
#include <stdlib.h>
/* Todo: Document */
#define WORD_ONES_LOW ((size_t)-1 / UCHAR_MAX)
#define WORD_ONES_HIGH (((size_t)-1 / UCHAR_MAX) << (CHAR_BIT - 1))
/*@doc
* @desc: see if an arch word has a zero
* #param: w - string aligned to word size
*/
static inline bool word_has_zero(const size_t *w)
{
return ((*w - WORD_ONES_LOW) & ~*w & WORD_ONES_HIGH);
}
/*@doc
* @desc: see POSIX strlen() …Run Code Online (Sandbox Code Playgroud) 我使用jQuery来动态计算textarea的值:
function count_chars () {
count_chars=$('#text_textarea').val().length;
}
Run Code Online (Sandbox Code Playgroud)
...然后提交序列化表单,通过ajax将textarea的文本发送到php文件,然后验证服务器端的文本.但是,我遇到了换行符和空格问题.
当然,如果我只是从textarea获取"原样"的文本,php会将每个新行计为两个或四个字符(\n,...).所以我试着用这样的东西替换它们:
strlen(str_replace(array("\r", "\n"), ' ', $text)))
Run Code Online (Sandbox Code Playgroud)
或这个:
strlen(preg_replace('/\s+/', ' ', trim($text)))
Run Code Online (Sandbox Code Playgroud)
但是,如果我得到例如10个段落并且jQuery返回2500个字符,则php将返回2510或2490,这取决于我是用空格替换新行还是完全删除它们.所以差异是20,但只有10个新线......?
我错过了什么?我怎样才能让php返回与jQuery相同的结果?问题出在哪里,在php或jQuery中?
我有这个代码:
$string = '???';
echo strlen($string);
Run Code Online (Sandbox Code Playgroud)
由于$string有3个波斯字符,输出必须是3但我得到6.
???有3个字符.为什么我的输出是6?
如何strlen()在php中使用具有实际输出的波斯语?
我试图理解为什么Valgrind正在吐痰:
==3409== Invalid read of size 8
==3409== at 0x4EA3B92: __GI_strlen (strlen.S:31)
Run Code Online (Sandbox Code Playgroud)
每当我在动态分配的字符串上应用strlen时?
这是一个简短的测试用例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *hello = "Hello World";
char *hello2;
/* Step 1 */
printf("Step 1\n");
printf("strlen : %lu\n",(unsigned long)strlen(hello));
/* Step 2 */
hello2 = calloc(12,sizeof(char));
hello2[0] = 'H';
hello2[1] = 'e';
hello2[2] = 'l';
hello2[3] = 'l';
hello2[4] = 'o';
hello2[5] = ' ';
hello2[6] = 'W';
hello2[7] = 'o';
hello2[8] = 'r';
hello2[9] = 'l';
hello2[10] = …Run Code Online (Sandbox Code Playgroud) static int strlen30(const char *z){
const char *z2 = z;
while( *z2 ){ z2++; }
return 0x3fffffff & (int)(z2 - z);
}
Run Code Online (Sandbox Code Playgroud)
我阅读并想知道sqlite的源代码.
为什么用"strlen30()"代替strlen()(string.h)?
谢谢.
我有一个wordpress网站.
我创建了简单的页面模板,如:
<?php
/**
* Template Name: Test
*/
echo strlen('??????');
?>
Run Code Online (Sandbox Code Playgroud)
然后我使用这个模板创建了一个页面.该页面显示俄语字符串'Привет'的长度(表示'Hello').我希望看到12,因为由6个字符组成的UTF-8编码俄语字符串应该有12个字节的大小,但我得到6.
我在其他服务器上测试了相同的东西并且具有正确的值 - 12.所以我认为原因是我的服务器配置.我有wp 3.2.1(升级到wp 3.5.1后我有同样的问题)和PHP 5.3.3.
目前我花了大约5天试图找到解决方案,但没有运气.有谁知道这种行为的原因是什么?