Php 使用子字符串࿽;

Php 使用子字符串࿽;,php,Php,我知道这似乎是一个编码问题,我不这么认为。 我有一个网站,当用户保存他们的工作时,人们使用ckeditor发布一些长文本(故事),一些HTML进入数据库,为所有表的utf8编码做准备 对于所有帖子,我都会生成一个“文本缩略图”,它是全文的一个片段,在我使用utf-8的所有页面中,全文看起来都不错 我用于获取“文本缩略图”的代码: 到目前为止,我已经运行了一个多月的网站,这个问题来自下一个需要处理的特定字符串 <p>Foto artística<br>Mi esposo

我知道这似乎是一个编码问题,我不这么认为。 我有一个网站,当用户保存他们的工作时,人们使用ckeditor发布一些长文本(故事),一些HTML进入数据库,为所有表的utf8编码做准备

对于所有帖子,我都会生成一个“文本缩略图”,它是全文的一个片段,在我使用utf-8的所有页面中,全文看起来都不错

我用于获取“文本缩略图”的代码:


到目前为止,我已经运行了一个多月的网站,这个问题来自下一个需要处理的特定字符串

<p>Foto artística<br>Mi esposo invito uno de sus viejos amigos a casa, un
   hombre muy impresionante, llegó en un auto de lujo, vistiendo finas ropas, 
   reloj de plata, cadenas de oro y cosas impresionantes, el nos platico de 
   muchas de las cosas a las que se dedico desde que perdió la comunicación 
   con mi esposo, desde ayudante de cocina hasta productor de películas 
   independientes que había logrado vender por sumas importantes de dinero,
   el motivo de su visita era porque necesitaba a alguien como mi esposo 
   para salir en una de sus filmaciones, a cambio recibiría una buena 
   cantidad de dinero, clases de actuación y otros beneficios, claro que 
   aceptamos sin pensarlo.</p>
Foto artística
我是一位来自世界各地的朋友 我的预付款,我的汽车,国际泳联, 普拉塔酒店、奥罗酒店和cosas酒店 这是一个很好的解决方案 如果我是埃斯波索人,那么我们就需要一个生产商 独立人士是重要的商人, 艾尔·莫蒂沃(el motivo de su visita)是一位来自欧洲的年轻人 在电影中,一位年轻的演员,一位年轻的演员 康蒂达·德迪内罗,克拉罗·奎奥·奥特罗斯·博吉奥斯实际课程 阿塞普塔莫斯·辛彭萨罗

当我使用上面的php代码处理它时,我得到以下结果:

这是一个充满艺术气息的世界,是一个充满活力的世界�...

具体来说,最后一个单词是重音的
llegó
,同一字符串中的其他单词和“文本缩略图”(例如
artística
)没有同样的问题,似乎结尾的重音字母是个问题,在使用
substring
之前,我尝试使用一些php函数对字符串进行编码/解码,但我没有得到任何结果,如果您能以某种方式指导我找到解决方案,请执行

以下是php代码在在线编辑器中的行为方式
substr
对字节进行操作。你给它一个多字节的字符串,这不是一个好主意。字符
ó
有超过1个字节,您可以在该字符的字节之间的位置拆分字符串,从而中断字符。改为尝试
mb_substr

参考资料:


substr
对字节进行操作。你给它一个多字节的字符串,这不是一个好主意。字符
ó
有超过1个字节,您可以在该字符的字节之间的位置拆分字符串,从而中断字符。改为尝试
mb_substr

参考资料:

是正确的。然而我 我想补充一点,应该向大家展示如何更全面地解决这个问题

::先做这个
  • PHP多字节“
    mbstring
    ”模块
你现在有三个选择; i) 在整个PHP中设置正确的编码
  • PHP.ini
    中设置PHP内部编码(您也可以使用类似的函数根据需要设置HTML和正则表达式编码)
ii)或在整个页面上设置正确的编码
  • 在使用多BTE字符的页面顶部添加
iii)或仅在特定功能上设置正确的编码:
  • 使用

  • 使用

    • 注意:Xanteev的回答假设您已经为PHP设置了通用/全局UTF-8编码,因此不再在多字节函数中定义它
奖励积分: 这些不直接适用于这个问题,但可能是相关的,值得重复

  • 注意在UTF-8的所有问题中都清楚地表明,您的MySQL(如果使用)需要
    \u utf8mb4
    而不是
    \u utf8
    ,因为MySQL仍然无法正确保存某些4字节字符

    您的字符
    为2字节

  • 请注意,这也表明您需要正确编码
    HTML
    输出以正确显示复杂字符(即2+字节UTF-8字符)

    • 是正确的。然而我 我想补充一点,应该向大家展示如何更全面地解决这个问题

      ::先做这个
      • PHP多字节“
        mbstring
        ”模块
      你现在有三个选择; i) 在整个PHP中设置正确的编码
      • PHP.ini
        中设置PHP内部编码(您也可以使用类似的函数根据需要设置HTML和正则表达式编码)
      ii)或在整个页面上设置正确的编码
      • 在使用多BTE字符的页面顶部添加
      iii)或仅在特定功能上设置正确的编码:
      • 使用

      • 使用

        • 注意:Xanteev的回答假设您已经为PHP设置了通用/全局UTF-8编码,因此不再在多字节函数中定义它
      奖励积分: 这些不直接适用于这个问题,但可能是相关的,值得重复

      • 注意在UTF-8的所有问题中都清楚地表明,您的MySQL(如果使用)需要
        \u utf8mb4
        而不是
        \u utf8
        ,因为MySQL仍然无法正确保存某些4字节字符

        您的字符
        为2字节

      • 请注意,这也表明您需要正确编码
        HTML
        输出以正确显示复杂字符(即2+字节UTF-8字符)


      +1但值得注意的是,只有在页面加载级别(例如在
      php.ini
      fi中)对正确的字符集进行编码时,
      mb_字符串
      函数才会有用
      <p>Foto artística<br>Mi esposo invito uno de sus viejos amigos a casa, un
         hombre muy impresionante, llegó en un auto de lujo, vistiendo finas ropas, 
         reloj de plata, cadenas de oro y cosas impresionantes, el nos platico de 
         muchas de las cosas a las que se dedico desde que perdió la comunicación 
         con mi esposo, desde ayudante de cocina hasta productor de películas 
         independientes que había logrado vender por sumas importantes de dinero,
         el motivo de su visita era porque necesitaba a alguien como mi esposo 
         para salir en una de sus filmaciones, a cambio recibiría una buena 
         cantidad de dinero, clases de actuación y otros beneficios, claro que 
         aceptamos sin pensarlo.</p>
      
      <?php
      $input = '<p>Foto artística<br>Mi esposo invito uno de sus viejos amigos a casa, un hombre muy impresionante, llegó en un auto de lujo, vistiendo finas ropas, reloj de plata, cadenas de oro y cosas impresionantes, el nos platico de muchas de las cosas a las que se dedico desde que perdió la comunicación con mi esposo, desde ayudante de cocina hasta productor de películas independientes que había logrado vender por sumas importantes de dinero, el motivo de su visita era porque necesitaba a alguien como mi esposo para salir en una de sus filmaciones, a cambio recibiría una buena cantidad de dinero, clases de actuación y otros beneficios, claro que aceptamos sin pensarlo.</p>';
           $str = trim(strip_tags(nl2br($input))); //get only text
      
           echo mb_substr($str, 0, 99) . (mb_strlen($str) > 100 ? '...' : ''); //get part of string, if original string was longer than 100 characters add 3 dots at the end
           ?>
      
      <?php
      var_dump(strlen('ó'));