substr和strip_tags字符问题和解决方案

时间:2017-11-01 23:26:04

标签: php

我为php调用相同的文本,但结果是chracter问题。 e.g;

PROFILE

并运行函数

"<div class="open"><?php echo ex_substr(180); ?></div>"

在文本内容的最后,有一些字符问题,例如:�

我对php非常新。

2 个答案:

答案 0 :(得分:0)

正如我在评论中所说,当你看到像 这样奇怪的东西时,你可能会有一些奇怪的非UTF-8字符。

虽然我绝不是编码方面的专家(典型的我只是删除那个垃圾)这是我用它来处理它们

  preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

这是一个可以试用的PHP沙箱。

http://sandbox.onlinephpfunctions.com/code/695ad38ae46ef5a142102dd6150fd84279b1a058

 $string ='this is a string �';
 echo preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

输出

  'this is a string '

如果最后的额外空间让你感到烦恼,你可以用trim($string)来点击它。

另一个技巧是用空格替换它。然后删除任何多个空格。这样,如果它在单词之间,它不会只是将它们塞在一起。

 $string ='this is a�string';
 $string = preg_replace('/[\x00-\x1F\x80-\xFF]/', ' ', $string);

 echo trim( preg_replace('/\s{2, }/', ' ', $string)); //replace 2 or more spaces with a single space.

即使DB字符集设置为UTF-8,我偶尔会在我的数据库中得到奇怪的东西。我们有很多内容从网上废弃,所以谁知道那是什么废话。

这是解决这个问题的一种“基本”方法,但是如果你不担心失去这些角色应该没问题。我应该更多地研究编码问题,因为我没有PHP6来修复所有这些问题。

(根据我的理解PS,PHP6应该对多字节字符串有更多的支持,但由于C的缺点,它们都崩溃了,这就是我们从PHP5到PHP7的原因)

希望有所帮助。

答案 1 :(得分:0)

$title= strip_tags(substr($title,0,$char));

而不是

$title= mb_substr($title,0,$char);

使用它时问题彻底解决了。