【问题标题】:Preg_Replace not working on French Character - PHPPreg_Replace 不适用于法语字符 - PHP
【发布时间】:2015-08-20 20:38:18
【问题描述】:

我已经搜索了一段时间,所以希望这不是一个已经被问过很多次的问题。

我正在尝试在 php 上编写一个脚本,该脚本将从字符串中删除停用词,然后将其分解为单词数组。停用词可以是英语或法语。

目前以下内容不适合我,因为它不会删除法语字符:

$needles=array(
'/\bil\b/i', 
'/\bla\b/i', 
'/\ble\b/i', 
'/\b'. htmlentities('à') .'\b/i'
);
print_r($needles);

$result=preg_replace($needles, "", htmlentities("il y à trois personne dans la salle à manger"));
print_r($result);

输出删除了所有内容,但没有删除法语字符:à

【问题讨论】:

  • 为什么在这里使用htmlentities()
  • 如果您事先在输入和正则表达式模式上应用htmlentities(),那么它将变为&a…; → 其中单词\b 边界在任一端都不匹配。
  • 确实,htmlentities() 必须在包含文本之前使用(如果需要)在 html 中。如果您需要先编辑字符串,请不要使用它。
  • 不得不说我很困惑,因为我收到的文本有这些口音,认为 htmlentities 至少可以让我将所有内容标准化为 UTF 8。在这里做什么,甚至替换为 &agrave ;不会从字符串中删除重音字符。
  • 啊! UTF8 不是你想的那样。

标签: php regex


【解决方案1】:

正如 cmets 中所指出的,htmlentities('à') 将为您提供[3] => /\bà\b/iIt won't match your letter.

相反,使用 àu 标志在模式中启用 Unicode:

'/\bà\b/iu'

demo

IDEONE demo:

<?php
$needles=array(
'/\bil\b/i', 
'/\bla\b/i', 
'/\ble\b/i', 
'/\bà\b/iu'
);
print_r($needles);

$result=preg_replace($needles, "", "il y à trois personne dans la salle à manger");
print_r($result);

输出:

y  trois personne dans  salle  manger

【讨论】:

  • 哇,谢谢您的帮助。这解决了我的问题,并且我对何时使用 htmlentities 有了更好的了解。
猜你喜欢
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多