使用OpenAi协助解决WordPress摘要结尾显示<�>乱码

2023-03-25 218 0

昨天给博主主题做了下修改。

原主题首页和分类页、Tag页等的列表中文章摘要全部是调用文章内容,截取90个字符,我改成了如果设置了摘要就调用摘要,没设置就截取正文前230个字符,改完后所有截取正文内容的文章的摘要结尾都显示一个乱码<�>,对于一个强迫症患者来说实在有点影响观感。

出现这种乱码是因为WordPress模板的默认字符集是UTF-8,对于英文来说,一个字母就是一个字节(8位),而中文是一个汉字三个字节(24位),文章摘要截断的函数只会判断在多少字节的地方去截取,如果到了那个地方一个汉字只显示了三分之一或者三分之二,那个汉字就不能够完整显示, 而函数又不能很智能的多截一个字节或者少截一个。这就导致WordPress 显示摘要的时候英文内容摘要可以正常显示,但是中文摘要在截断之后,往往会出现乱码符号。

这不是数据库的错,也不是字符集的问题,只是因为作者在编写模板的时候并没有考虑到中文字符可能产生的问题,这就需要我们手动修改截断的函数。

解决方法是在输出摘要的标签后面加上"utf-8",如下:

这样显示就正常了。

以前网站出现的问题的时候,都是通过Google搜索问题,再看高手们怎么解决,大部分时候都能够顺利找到解决办法,但有时候遇到的问题不典型,大牛们的网站没有出现过,那么从网络上就找不到直接解决的办法或者解决思路。

随着Chatgpt的出现,我在解决工作和生活中自己的知识体系尚未覆盖的难题的时候,第一时间想到的是“看看AI怎么说”,这次也是一样。

从修改代码开始。打开chatgpt,输入问题:

调用wordpress文章摘要,如果没有摘要就截取文章内容前230个字符

AI给出的回答:

以下是WordPress获取文章摘要并在没有摘要时截取文章内容的代码:

<?php
if(has_excerpt()){
the_excerpt();
} else {
echo substr(get_the_content(), 0, 230).'...';
}
?>

将此代码放置在您的WordPress主题的单个文章文件中,即可在文章页面上调用文章摘要。如果文章中没有摘要,则会截取文章内容前90个字符并显示在页面上。您可以根据需要更改数字“230”以截取不同长度的字符。

但是这有个问题,如果文章开头是一张图片,就会把图片的url地址显示出来,于是再次输入:

继续上面的代码,忽略图片

AI给出的回答:

以下是WordPress获取文章摘要并在没有摘要时截取文章内容前230个字符(忽略图片)的代码:
<?php
if(has_excerpt()){
the_excerpt();
} else {
$content = get_the_content();
$content = preg_replace("/<img[^>]+\>/i", "", $content); // 去除文章中的所有图片
$content = substr($content, 0, 230).'...'; // 截取前90个字符
echo $content;
}
?>

将此代码放置在您的WordPress主题的单个文章文件中,即可在文章页面上调用文章摘要。如果文章中没有摘要,则会截取文章内容前230个字符(忽略图片)并显示在页面上。请注意,这段代码使用正则表达式去除了文章中的所有图像。如果您想保留某些图像,请根据需要修改代码。

连注释都有!

修改摘要显示的问题顺利解决,但是出现了本文主题的问题:摘要末尾乱码!继续找AI,输入问题:

调用wordpress文章摘要,如果没有摘要就截取文章内容,忽略文章中的图片,避免末尾因编码不一致导致的乱码

AI的回答:

可以使用以下代码实现调用 WordPress 文章摘要,如果没有摘要就截取文章内容,忽略文章中的图片,避免末尾因编码不一致导致的乱码:
<?php
// 获取文章摘要或者截取文章内容
if (has_excerpt()) {
// 如果文章有摘要,直接获取摘要
the_excerpt();
} else {
// 如果文章没有摘要,获取文章内容并截取指定长度
$content = get_the_content();
$content = preg_replace('/<img[^>]+./', '', $content); // 去除文章中的图片
$content = strip_tags($content); // 去除 HTML 标签
$content = mb_substr($content, 0, 230, 'utf-8'); // 截取指定长度
echo $content;
}
?>
这段代码首先判断文章是否有摘要,如果有就直接获取摘要并输出;如果没有,就获取文章内容并进行处理。处理过程中,使用正则表达式去除文章中的图片,使用 strip_tags 函数去除 HTML 标签,然后使用 mb_substr 函数截取指定长度的内容,并输出。这样就可以避免末尾因编码不一致导致的乱码问题。

实际上在解决乱码的问题的时候,还加了一个去除HTML 标签,这就完美解决了我的所有问题。

AI真的在改变我们的生活。

虽然能基本能看懂html和php代码,在网络的帮助下也能写出一些蹩脚的网页代码,但我毕竟并不是程序员,网站遇到问题首先想到的不是查代码而是通过网络寻求帮助,但可能会碰到上文提到的问题:非典型问题找不到资料。

现在有了ai,我就能够直接把问题抛给ai,它不仅能提出建议,而且还会分析问题出现的原因,让我一目了然,直接获得解决之道。

但使用AI也是有门槛的,一句话就是要会问问题,首先是你对问题的定位描述要准确,才能获得准确的回答。

关于如何向ai提问,网上也有很多教程,有时间另文详述。

 

相关文章

使用Cloudflare进行CDN加速后,宝塔面板/aaPanel无法使用域名打开的解决方案
近年重要的数据泄露事件盘点
ChatGPT账号注册教程,免账号体验链接
使用油猴脚本Color back让灰色网页重新变为彩色
超全HTML颜色代码表
网页中因固定尺寸图框引发的图片变形问题的解决方案

发布评论