更新 mysql table 编码特殊字符

update mysql table encode special characters

我有一个 mysql table 叫 "Movies"。我刚刚发现有些电影包含特殊字符。例如,有一些电影是我爬取并插入到我的 table 中的,例如 'WALL·E' 或 'Mr. and Mrs. Smith',但它们在数据库中插入为 'WALL & middot ; E' 和 'Mr. & amp ; Mrs. Smith'.这在我的调查应用程序中造成了问题,因为例如我的调查中有一个自动完成字段,用户应该在其中插入 his/her 最喜欢的电影名称,因此如果用户尝试查找 WALL·E,他必须插入 'WALL & middot ; E'!!

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

谢谢,

这不是 MySQL 问题。

问题是您存储到数据库的值。

如果你想"decode"将字符串中的HTML实体转化为它们所代表的字符,可以使用PHPhtml_entity_decode 作用于你从网页上抓取的值,然后将该值存储在数据库中。

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


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

如果用户正在搜索“Mr. & Mrs. Smith”,您可以使用 PHP htmlentities 函数将其编码为 return:

 Mr. & Mrs. Smith

并将其用作搜索字符串。

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

如果您不介意单独处理每个角色,您可以对每个角色执行此操作:

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

也就是说,如果您想用实际字符替换 HTML 实体。如果您只想从当前电影标题中删除 hard-to-type 字符,只需使用 '' 即可。不过,在使用 REPLACE 破坏数据库之前,请务必进行备份。

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

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

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