【问题标题】:Preg replace with accent lettersPreg 用重音字母替换
【发布时间】:2014-07-09 09:59:05
【问题描述】:

我试图在字符串中的名称后插入一个中断。但是,名字可以有像é这样的字符

$string = 'Test string';
$name = 'Tést';

$replacement = '$0<br />$1';
return preg_replace("/^$name/i", $replacement, $string);

我希望这个返回:

Test<br /> string

Tést 也可以是:Héllo、byé 或 nùl 这应该是可能的吧?

提前致谢

【问题讨论】:

  • 如果您不能真正控制$name 的内容,当它出现正则表达式字符时,您可能会感到惊讶。想想.| 等。你明白了。根据您要实现的目标,这甚至可能成为安全漏洞。

标签: php regex preg-replace preg-match special-characters


【解决方案1】:

我用这样的东西来整理口音:

$collate = [
    "À-Æ" => "A", "à-æ" => "a", "Ç"   => "C", "ç"   => "c",
    "È-Ë" => "E", "è-ë" => "e", "Ì-Ï" => "I", "ì-ï" => "i",
    "Ñ"   => "N", "ñ"   => "n", "Ò-Ø" => "O", "ò-ø" => "o",
    "ß"   => "s", "Ù-Ü" => "U", "ù-ü" => "u", "Ý"   => "Y", "ý" => "y"
];

$string = "Test string";
$name = "Tést";

foreach($collate as $from => $to) {
    $name = preg_replace("/[".$from."]/", $to, $name);
}
// echo $name; => "Test"

return preg_replace("/^".$name."/", "$0<br />", $string);
// result: "Test<br /> string"

【讨论】:

  • 很抱歉重复的编辑调整,我每次阅读你的问题时都会略有不同 XD
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2016-04-19
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
相关资源
最近更新 更多