【发布时间】:2016-03-18 06:19:52
【问题描述】:
我必须承认我对php一无所知,而且我现在的脚本是继承的......
它使用 city 名称查询 MySQL 数据库,并返回它找到的 city 的所有实例。
我遇到了几个问题:第一个与连字符有关(例如 Stratford-upon-Avon);已通过添加
解决$searchq = str_replace( '-', ' ', $searchq );
这让我可以在没有连字符的情况下在数据库中输入数据。
我剩下的问题与外国口音有关(特别是:accent、grave、circumflex、cedille、tilde)。我尝试了上百万个函数,其中很多是我在这个网站上找到的,但都无法正常工作。
我当前页面的主要php代码是这样的
$searchq = filter_var("%{$_POST['keyword']}%", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); // Sanitize the string
$searchq = str_replace('-', '', $searchq);
$sql = "SELECT Image, Chain, Country, City, Top as '', Medium as '', Low as '' FROM Chains WHERE Country LIKE ? OR City LIKE ?"; // Your query string
$prepare = $mysqli->prepare($sql); // Prepare your query string
$prepare->bind_param('ss', $searchq, $searchq); // Bind the placeholders to your search variables
// s = string | i = integer | d = double | b = blob
$prepare->execute(); // Execute the prepared statement
$prepare->store_result(); // Store the results for later checking
我没有参加这个论坛,因为我知道它是为高级开发人员准备的,我不是其中之一......
以上代码所做的只是删除重音字母,而不是用没有重音符号的相同字母替换它
编辑
如何再次引起 Ollie Jones 的注意?
我被卡住了,不知道如何处理脚本部分
另一个编辑 当我在表 SQL 中输入它时
ALTER TABLE Chains CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
我收到此警告,但什么都没做...
#1253 - COLLATION 'utf8_general_ci' 对 CHARACTER SET 'utf8mb4' 无效
【问题讨论】:
-
你在这里很好。欢迎来到 Stackoverflow。你究竟为什么要摆脱所有这些特殊字符?你的数据库不能也包含它们吗?
-
以法国小镇“Sèvres”为例。像数据库中的许多其他人(1000s)一样,我不想同时有口音和没有口音。所以数据库有“Sevres”,如果有人写了正确的词,那一刻的回复是“Nothing found”......
-
让我在最后一条评论中添加关于带和不带重音输入数据库的内容。以简单的词“Sèvres”(坟墓)为例。像我这样的人可能会写“Sévres”(急性)。其他人习惯用谷歌搜索写“Sevres”(没有口音)。这就是简单的情况。在更复杂的情况下,您可能有 2 个不同的标志(重音和回音;锐音和 cedilla);那么你会得到一些由两个或三个单词组成的单词,并为所有组合和可能的错误腾出空间,你最终会付出大量的工作和混乱......“简单”的出路是得到一个删除所有重音的脚本。
-
拿“简历”或让它更有趣的“tête-à-tête”......
-
数据库中最好有两列,一列是带有重音符号和变音符号的实际名称,第二列是没有的。一旦有人输入了一个单词,您就会删除代码中的特殊字符并搜索该条目是否存在(基于 unaccented/slug 列)并使用它。这样您就可以显示重音版本并按非重音搜索。
标签: php mysql diacritics