更新mysql表编码特殊字符

时间:2015-06-22 15:04:27

标签: php mysql autocomplete special-characters encode

我有一个名为“Movies”的mysql表。我刚发现有些电影包含特殊字符。例如,有些电影是我抓取并插入我的表格中的,例如'WALL·E'或'Mr.和史密斯夫人一样,但他们被插入数据库中作为'WALL& middot; E'和'先生&安培;放大器史密斯夫人'。这在我的调查应用程序中引起了一个问题,因为例如我在调查中有一个自动完成字段,用户应该插入他/她最喜欢的电影名称,所以如果用户试图找到WALL·E,他必须插入'WALL& middot; E'!!

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

谢谢,

3 个答案:

答案 0 :(得分:1)

这不是MySQL问题。

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

如果你想"解码"将字符串中的HTML实体添加到它们代表的字符中,您可以对从网页上删除的值使用PHP html_entity_decode 函数,然后将该值存储在数据库中

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

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

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

 Mr. & Mrs. Smith

并将其用作搜索字符串。

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

答案 1 :(得分:1)

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

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

也就是说,如果要将HTML实体替换为实际字符。如果您只想从当前电影标题中删除难以识别的字符,只需使用''代替。在使用REPLACE对数据库进行核对之前,请先进行备份。

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

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

答案 2 :(得分:0)

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