PHP:$_POST 中的波兰国家标志 - strlen 和 mb_strlen 值错误
我现在很绝望,因为我尝试了我找到的所有方法,但仍然无法很快得到我需要的结果,因为我答应纠正朋友的网站。
问题是:
我通过 $_POST 得到一个字符串,它需要:
- 清除任何 html 标签(我通过 strip_tags 做到这一点:效果很好)
- 然后,它需要正好 1000 个字符长,这就是我的痛苦开始的地方:它必须适用于多字节字符,例如波兰语符号。
现在我尝试用以下命令剪切文本:
- mb_substr($this,0,1000,'UTF-8')
- mb_substr($this,0,1000)
和
- substr($this,0,10000)
我总是得到错误的结果:最终的字符串总是少于 1000 个字符,我不知道为什么。你能帮我解决这个问题吗?
也许这会很有用:
我粘贴到表单的文本是:
Ciekawy, nieco sportowy wygląd, nisko zamontowana kanapa, dobre hamulce, niezłe podwozie, znakomita zwrotność, dynamiczny silnik – oto cechy którymi GS500E zdobywał rynek i pokonywał rywali w testach porównawczych. W 1992 r. postawiono go nawet do konfrontacji z większą Yamahą XJ600S Diversion i nowocześniejszym Kawasaki GPZ500S. Co prawda przegrał, ale też nie było szans, by walczył jak równy z równym. Ważniejsze były oceny, które wystawili mu dziennikarze z prasy fachowej. Zaskoczeniem było przede wszystkim to, że tak tani motocykl może prezentować tak wysoki poziom w zakresie mocy i charakterystyki silnika. Chwalono również hamulce i podwozie. W drugiej połowie lat dziewięćdziesiątych GS500E zaczął wyraźnie przegrywać w testach porównawczych. Nie mógł już dotrzymać kroku zupełnie nowym konstrukcjom pokroju Hondy CB500 czy Kawasaki ER-5. Nadal cieszy się jednak zainteresowaniem nabywców a jako motocykl o bardzo uniwersalnym charakterze trafia zarówno w ręce początkujących jaki i doświadczonych motocyklistów.
然后我不想将其剪切到最多 1000 个字符:
$ok_to_go_to_database = mb_substr( strip_tags($long_text) ,0,1000);
在这种情况下,它给我返回 931 个字符:/
i'm in desperate now cause i tried everything i found and still can't get results that i need very quickly cause i promissed to correct friend's website.
here's the problem:
i get a characters string via $_POST and it needs to be:
- cleaned from any html tags (i do it through strip_tags : works good)
- then, it needs to be exactly 1000 characters long and here where my pain begins: it must work with multi-byte characters such as Polish signs.
right now i tried to cut the text with:
- mb_substr($this,0,1000,'UTF-8')
- mb_substr($this,0,1000)
and
- substr($this,0,10000)
and i always get wrong results: the final string is always shorter than 1000 characters and i don't know why. can you help me with this one?
Maybe this will be usefull:
The text i paste to the form is:
Ciekawy, nieco sportowy wygląd, nisko zamontowana kanapa, dobre hamulce, niezłe podwozie, znakomita zwrotność, dynamiczny silnik – oto cechy którymi GS500E zdobywał rynek i pokonywał rywali w testach porównawczych. W 1992 r. postawiono go nawet do konfrontacji z większą Yamahą XJ600S Diversion i nowocześniejszym Kawasaki GPZ500S. Co prawda przegrał, ale też nie było szans, by walczył jak równy z równym. Ważniejsze były oceny, które wystawili mu dziennikarze z prasy fachowej. Zaskoczeniem było przede wszystkim to, że tak tani motocykl może prezentować tak wysoki poziom w zakresie mocy i charakterystyki silnika. Chwalono również hamulce i podwozie. W drugiej połowie lat dziewięćdziesiątych GS500E zaczął wyraźnie przegrywać w testach porównawczych. Nie mógł już dotrzymać kroku zupełnie nowym konstrukcjom pokroju Hondy CB500 czy Kawasaki ER-5. Nadal cieszy się jednak zainteresowaniem nabywców a jako motocykl o bardzo uniwersalnym charakterze trafia zarówno w ręce początkujących jaki i doświadczonych motocyklistów.
then i wnt to cut it to max 1000 characters:
$ok_to_go_to_database = mb_substr( strip_tags($long_text) ,0,1000);
and in this case it gives me back 931 characters :/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
CRLF 为 931。
检查您的 HTTP 标头。确保您确实接收的是 UTF-8 格式的数据,而不是 CP1250 格式的数据。
And the CRLF makes 931.
Check your HTTP headers. Make sure that you are really receiving data in UTF-8 and not CP1250.