【问题标题】:PHP substring and strange icon on rendered html呈现的html上的PHP子字符串和奇怪的图标
【发布时间】:2023-03-17 02:01:01
【问题描述】:

我真的不知道为什么在西里尔字体上,子字符串用“?”替换一些字符

我的代码

$string1 = get_the_content();
$string = strip_tags($string1);
$stringcutted = substr($string,0,150);
$replacement = "...";
$final = substr($stringcutted, 0, -3).$replacement;

看看它是如何在 html 上呈现的

有什么办法吗?

【问题讨论】:

    标签: php string substring


    【解决方案1】:

    您需要检查字符编码。基本上,您有一个以一种格式编码的字符串,并且您正在以另一种格式输出它。

    对于国际化的东西(看起来你正在这样做),那么我会使用 UTF-8: - 在您的 HTML 文件中添加头部(靠近顶部) - 在您的 PHP 中,确保您将所有字符串处理为 UTF-8 - 如果您还有一个数据库,请确保数据库、表和字段都配置为 UTF-8(警告:进行此更改可能会在没有导入/导出的情况下损坏现有数据!)。 - 如果您正在阅读带有特殊字符的模板文件,还要确保它们是 UTF-8。 (如果没有特殊字符,那么普通的 AscII 就可以了)

    这就是简单的答案。有很多关于字符编码的阅读 - 只需谷歌它。

    (替代解决方案,使用 ASCII,但将所有内容都转换为网络友好的字符代码。但要正确获取所有代码比较棘手,尤其是在处理用户输入时。)

    【讨论】:

      【解决方案2】:

      因为 PHP 的字符串函数是基于字节字符串的;他们对字符编码一无所知。因此,在 UTF-8 之类的字符中,一个字符可以占用多个字节,它不会按照您希望的方式工作:

      <?php 
       $x = 'Подмосковные вечера';
       print(strlen($x)."\n");        # 37, not 19
       print(substr($x,0,1)."\n");    # �, not П
       print(substr($x,0,2)."\n");    # П, not По
      ?>
      

      如果您想操作非 ASCII 文本,请查看 multibyte string functions。

      【讨论】:

        【解决方案3】:

        您必须手动定义字符集。使用 mb_substr()。它应该有帮助。 http://php.net/manual/en/function.mb-substr.php

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多