有助于摆脱数据库中的HTML特殊字符

时间:2011-03-02 05:04:09

标签: sql html decode htmlspecialchars

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

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

我尝试使用htmlspecialchars_decode AND html_entity_decode查看数据库中文章的标题,以便摆脱这些,但它没有任何效果。

如果我只是从数据库中获取示例并回显它,它看起来会很好: 什么是你的快乐,烤宽面条或比萨曼彻斯特风格?

如果我转到joomla的文章页面,它将如下所示: What’s Your Pleasure, Lasagna Or Pizza Manchester Style?

当我去PhpMyAdmin直接查看数据库中的内容时,这是标题的内容: What’s Your Pleasure, Lasagna Or Pizza Manchester Style?

我甚至试图删除符号:

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

或者像这样替换它

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

但没有。 当我再次尝试对其进行编码而不是对其进行解码时(只是为了查看我是否在正确的数据库中)它再次工作并对其进行编码......

拜托,我很高兴有任何新想法...... 谢谢, Yanipan

3 个答案:

答案 0 :(得分:4)

尝试将编码设置为cp1252。这对我有用:

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

答案 1 :(得分:1)

可能你最好的选择是在数据库本身内进行搜索和替换,而不是尝试用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, '’', '\'');

试一试。

答案 2 :(得分:0)

需要更多信息


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