我知道这似乎是一个编码问题,我不这么认为。我有一个网站,当用户保存他们的工作时,人们使用 ckeditor 发布一些长文本(故事),一些 HTML 进入数据库,该数据库为所有表的 utf8 编码做好准备。
对于所有帖子,我生成一个“文本缩略图”,它是全文的一个片段,全文看起来不错,在所有页面中我都使用 utf-8。
我用来获取“文本缩略图”的代码:
<?php
$str = trim(strip_tags(nl2br($historia['texto']))); //get only text
echo substr($str, 0, 99) . (strlen($str) > 100 ? '...' : ''); //get part of string, if original string was longer than 100 characters add 3 dots at the end
?>
到目前为止,我已经运行该站点一个多月了,问题出现在下一个要处理的特定字符串上
<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 代码处理它时,我得到以下结果:
艺术照我丈夫邀请他的一位老朋友来我家,一个非常令人印象深刻的人,他到了......
具体的最后一个单词是重音的llegó
,同一个字符串中的其他单词和“文本缩略图”等artística
没有同样的问题,似乎最后的重音字母有问题,我尝试使用一些php函数来尝试在使用前对字符串进行编码/解码,substring
但我没有得到任何结果,如果您能以某种方式指导我解决问题,请执行此操作。
这是在线编辑器中行为相同的 php 代码https://ideone.com/m6OjUN
substr
对字节进行操作。你给它一个多字节的字符串,这不是一个好主意。该字符ó
有 1 个以上的字节,您可以在该字符的字节之间的位置准确地拆分字符串,这会破坏该字符。试试吧mb_substr
:
<?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
?>
如果你想知道一个字符/字符串有多少字节,使用 strlen
<?php
var_dump(strlen('ó'));
参考:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句