帮助删除数据库中的 HTML 特殊字符

发布于 2024-10-20 00:34:39 字数 802 浏览 2 评论 0原文

我已将我的网站从 interspire CMS 迁移到 Joomla!内容管理系统。 我已经成功迁移了所有文章数据库,但其中一些有一个奇怪的问题 - 当我从 joomla 访问页面时,标题包含像 ’ 这样的 HTML 实体。

正如您可以从我使用的 CMS 中猜到的那样,我依赖 PHP 作为服务器端,并使用 MySql 作为数据库。

我尝试使用 htmlspecialchars_decodehtml_entity_decode 检查数据库中文章的标题,以摆脱这些标题,但没有效果。

如果我只是从数据库中获取一个示例并回显它,它看起来不错: 您喜欢哪一种,烤宽面条还是曼彻斯特风格的披萨?

如果我进入 joomla 中的文章页面,它将如下所示: 您喜欢什么,烤宽面条还是曼彻斯特风格的披萨?

当我去PhpMyAdmin直接查看数据库中的内容时,这是标题的内容: 您喜欢什么,烤宽面条还是曼彻斯特风格的披萨?

我什至尝试用以下内容删除该符号:

str_replace("’","",$title);

或像这样替换它,

str_replace('’',"'",$title);

但什么也没有。 当我尝试再次编码而不是解码它(只是为了看看我是否在正确的数据库上)时,它工作并再次编码......

拜托,我很高兴有任何新想法...... 谢谢, 亚尼潘

I've migrated my site from interspire CMS to Joomla! CMS.
I've managed to migrate all the database of articles, but some of them have a weird issue - when I access the page from joomla, the title contains HTML entities like .

As you can guess from the CMS's I use, I rely on PHP as my server side, and MySql for my database.

I tried to go over the titles of the articles in the database with htmlspecialchars_decode AND html_entity_decode in order to get rid of those, but it had no effect.

if I just grab an example from the DB and echo it, it will look OK:
What’s Your Pleasure, Lasagna Or Pizza Manchester Style?

if I go to the article page in joomla it will look like this:
What’s Your Pleasure, Lasagna Or Pizza Manchester Style?

When I go to PhpMyAdmin to see directly what is in the database, this is the contents of the title:
What’s Your Pleasure, Lasagna Or Pizza Manchester Style?

I even tried to remove the symbol with:

str_replace("’","",$title);

or replace it like this

str_replace('’',"'",$title);

but nothing.
When I tried to encode it again instead of decoding it (just to see if i'm on the right DB) it worked and encoded it again...

Please, I would be glad to have any new ideas...
Thanks,
Yanipan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夕嗳→ 2024-10-27 00:34:40

尝试将编码设置为 cp1252。这对我来说很有效:

$decoded = html_entity_decode($your_string, ENT_QUOTES, 'cp1252');

Try setting encoding to cp1252. This worked out for me:

$decoded = html_entity_decode($your_string, ENT_QUOTES, 'cp1252');

素罗衫 2024-10-27 00:34:40

也许你最好的选择是在数据库本身中进行搜索和替换,而不是尝试使用 php 进行搜索和替换。 mysql 中的搜索和替换是这样完成的:

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);

所以你的应该看起来像这样:

update ARTICLES set TITLE = replace(TITLE, '’', '\'');

尝试一下。

Probably your best bet is to do search and replace within the database itself vs trying to do it with php. Search and replace in mysql is done like this:

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);

So yours should look something like:

update ARTICLES set TITLE = replace(TITLE, '’', '\'');

Give that a shot.

暮凉 2024-10-27 00:34:40

需要更多信息


  1. 您的数据库上的字符编码是什么? &; 可能不是典型的 ASCII。
  2. PHP/Joomla 可能会对您的字符串进行双重编码。查看浏览器的页面源代码并在生成的 HTML 中找到文本。它可能只是以下内容之一,而不是What’s
    1. 什么&rsquo&59;s
    2. 什么&38;rsquo&59;s
    3. 什么

Need more info


  1. What is the character encoding on your database? That & or ;, may be something other than the typical ASCII.
  2. It's possible that PHP/Joomla is double-encoding your string. Look at the browser's page source and find the text in the produced HTML. Instead of What’s, it might just be one of the following:
    1. What&rsquo&59;s
    2. What&38;rsquo&59;s
    3. What’s
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文