我正试图在用德语写的文本中找到这个月。 (在html文件中)
3月写的是“März”。我想确定我抓住它所以我检查
马兹, 马兹, M&安培; AUML; RZ
我尝试使用此代码
if(preg_match("/ma?ä?(ä)?rz/i", $title))
return 3;
它适用于前两个,但不适用于& auml;。 我做错了什么?
(HTML和我的PHP文件以UTF8编码)
答案 0 :(得分:3)
为什么不尝试
(Marz|März|März)
答案 1 :(得分:3)
您必须首先解码实体,然后使用与Unicode Collation Algorithm一起使用的比较。例如,这适用于Perl:
use Unicode::Collate;
my $Collator = Unicode::Collate->new(normalization => undef, level => 1);
my $str = "Ich muß Perl studieren.";
my $sub = "MÜSS";
my $match;
if (my($pos,$len) = $Collator->index($str, $sub)) {
$match = substr($str, $pos, $len);
}
根据您希望进行的level
比较,可以匹配带有和不带标记的东西。
你如何在PHP中执行这样的基本Unicode操作我不知道,但我认为必须有一个相应的库,考虑到这些类型的东西是必要的。
答案 2 :(得分:2)
ä
不止一个字节或类似的东西 - 你必须这样做:
preg_match("/ma?(ä)?(ä)?rz/i", $title);
此外,Kengs方法更好。
答案 3 :(得分:1)
如果仅用于搜索目的,但不用于返回单词的实际位置,则可以使用html_entity_decode()
和iconv()
对搜索字符串进行规范化:
$string = html_entity_decode($string, ENT_QUOTES, "utf-8");
$string = iconv("UTF-8", "ASCII//TRANSLIT//IGNORE", $string);
// then search for "Marz"