小编Lig*_*ker的帖子

如何在UTF-8中使用"不区分大小写"和"不区分重音"的MySQL

我有"utf8 - UTF-8 Unicode"中的模式作为charset和"utf8_spanish_ci"的排序规则.

所有内部表都是InnoDB,具有与上述相同的字符集和校对.

问题出现了:

像查询一样

SELECT *
FROM people p
WHERE p.NAME LIKE '%jose%';
Run Code Online (Sandbox Code Playgroud)

我得到83个结果行.我应该有84个结果,因为我知道.

改变地点:

WHERE p.NAME LIKE '%JOSE%';
Run Code Online (Sandbox Code Playgroud)

我得到完全相同的83行.使用JoSe,Jose,JOSe等组合.报告所有相同的83行.

问题来自游戏中的重音.如果:

WHERE p.NAME LIKE '%josé%';
Run Code Online (Sandbox Code Playgroud)

我没有结果.0行.

但如果我这样做:

WHERE p.NAME LIKE '%JOSÉ%';
Run Code Online (Sandbox Code Playgroud)

我得到一个结果行,所以1行.这是唯一一个带有"jose"和大写字母的行.

我已经尝试过josÉ,或JoSÉ或我做的任何组合,只要重音符号保持大写或不大写,因为它确实存储在数据库中并且它仍然返回唯一的行.如果我突然改变"é"为"é",无论我用JOSE中的大小写做什么组合,它都不返回任何行.

所以结论:

  • 如果游戏中没有拉丁字符,则不区分大小写.
  • 如果出现拉丁字符则区分大小写.
  • 口音敏感,好像我搜索JOSE或jose,我只得到83行,而不是我需要的84行.

我想要的是?

  • 要搜索"jose","JOSE","José","JOSÉ","JÒSE","jöse","JoSÈ",......必须返回我知道存在的84行.我该怎么把我的搜索变为不区分大小写和"拉丁"不敏感.

类似的解决方案COLLATIONLIKE不为我工作的,不知道为什么?

我能做什么?

提前致谢!

编辑:

如果我喜欢这样的话:

WHERE p.NAME LIKE '%jose%' COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'

我也改变了列上所有可能的排序规则!

如果我做了类似的事情:

WHERE p.NAME LIKE _utf8 '%jose%' COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

报告了相同的83行,好像我什么都没做......

mysql utf-8 case-insensitive non-ascii-characters

20
推荐指数
2
解决办法
2万
查看次数

PHP Soap Server:使用字符串(xml字符串)而不是WSDL文件实例化(url to it)

Soap Server的PHP页面(我已经看过了):

http://www.php.net/manual/en/soapserver.soapserver.php

但是我错过了一个重要的缺乏文档,因为我自己的问题:

我需要知道是否可以使用XML字符串直接实例化服务器,就像SimpleXML类一样:

//From var (the one I want):
$movies = new SimpleXMLElement($xmlstr);
Run Code Online (Sandbox Code Playgroud)

要么

//From file and from string (the one I want):
$xml = simplexml_load_file('test.xml');

$xml = simplexml_load_string($string);
Run Code Online (Sandbox Code Playgroud)

所以我想做这样的事情:

$wsdl_cont = file_get_contents("../xmls/mywsdl.wsdl");
$server = new SoapServer($wsdl_cont);
Run Code Online (Sandbox Code Playgroud)

可能吗?

这样做的原因是,因为我有必须使用相同的XML一些不同的URL,所以我需要做一个模板URL飞一个替代,并将其更改为正确的,然后加载WSDL.但我不想在硬盘上保存即时生成的WSDL,以便在读取后立即将其删除.

是否有可能在PHP上创建某种"虚拟文件"并使用它,就像它是一个磁盘读取一样?某种流缓冲?还是某种文件描述符?

php string soap wsdl

7
推荐指数
1
解决办法
3872
查看次数

PHP-REGEX:重音字母与非重音字母匹配,反之亦然.怎么做到这一点?

我想做典型的高亮代码.所以我有类似的东西:

$valor = preg_replace("/(".$_REQUEST['txt_search'].")/iu", "<span style='background-color:yellow; font-weight:bold;'>\\1</span>", $valor);
Run Code Online (Sandbox Code Playgroud)

现在,请求单词可能类似于"josé".有了它,我也想要"jose"或"JOSÉ"或"José"等.

有了这个表达式,如果我写"josé",它会匹配"josé"和"JOSÉ"(以及所有案例变体).它始终只与重音变体匹配.如果我搜索"jose",它会匹配"JOSE","jose","Jose"而不是重音符号.所以我部分地想要我想要的,因为我对重音和非重音分别不区分大小写.

我需要它完全结合,这意味着重音(unicode)不敏感,所以我可以搜索"jose",并突出显示"josé","josÉ","José","JOSE","JOSÉ","JoSé",... .

我不想在单词上替换重音,因为当我在屏幕上打印时,我需要看到真实的单词.

有任何想法吗?

谢谢!

php regex case-insensitive non-ascii-characters

4
推荐指数
1
解决办法
2552
查看次数