更新mysql表编码特殊字符


update mysql table encode special characters

我有一个名为"Movies"的mysql表。我刚发现有些电影里有一些特别的角色。例如,有一些电影是我爬到桌子上插入的,比如《墙·E》或《先生》。和Smith夫人",但它们在DB中被插入为"WALL&中点;E和先生&史密斯太太。这在我的调查应用程序中造成了一个问题,因为例如,我的调查中有一个自动完成字段,用户应该在其中插入他/她最喜欢的电影名称,所以如果用户试图找到WALL·E,他必须插入"WALL&中点;E!!

有没有任何方法(最好是在mysql中)可以更新我的表,并用编码的名称替换所有包含特殊字符的电影?

谢谢,

这不是MySQL的问题。

问题在于存储到数据库中的值。

如果您想将字符串中的HTML实体"解码"为它们所代表的字符,可以对从网页中抓取的值使用PHPhtml_entity_decode函数,然后将该值存储在数据库中。

参考:http://php.net/manual/en/function.html-entity-decode.php


如果您想将值作为编码的HTML实体存储在数据库中,那么您可以通过获取用户正在搜索的任何值并对其进行编码来搜索这些值。(这可能还不清楚)。

如果用户正在搜索"Mr. & Mrs. Smith",您可以使用PHP htmlentities函数对其进行编码,以返回:

 Mr. & Mrs. Smith

并将其用作搜索字符串。

这种方法的缺点是有多种方法可以对同一个字符进行编码。htmlentities编码字符串的方式可能与网页上的内容不匹配。有些字符可能根本没有编码,等等。

如果你不介意单独处理每个字符,你可以对每个字符都这样做:

UPDATE movies SET movie_title = REPLACE(movie_title, '·', '·');

也就是说,如果您想用实际字符替换HTML实体。如果您只想从当前电影标题中删除难以键入的角色,只需使用"即可。不过,在用REPLACE破坏数据库之前,一定要做一个备份。

您可能想要创建一个新列,例如movie_easytype_title,在其中存储易于键入和匹配的标题版本,并且仍然保留适当的完整标题以供显示。

在将标题输入数据库之前,您可能应该在标题上运行html_entity_decode,以避免一开始就存储麻烦的HTML实体。

这些解决方案听起来很奇怪,我也知道它是用于url编码和解码的。但它是有效的
在将数据插入数据库时,您可以使用urlender()
在显示它时,您应该使用urldecode()