在PHP中分割,计数和格式化多字节字符

问题描述 投票:0回答:1

我正在构建一个实验性的PHP应用程序,用于处理西里尔UTF-8字符的诗歌。我想实现以下目标:

  • 计算每个字符的出现次数和“所有辅音”等类别的总数。只要我可以在输出中隐藏一些特殊字符和标点符号,它就可以包含在内。我使用UTF-8,所以只能使用多字节函数。不能使用count_chars():(
  • 保留换行符和大写字母。我保留了具有不同格式的原始文本的多个副本。它们可能看起来很多余,但我想保留尽可能多的信息。
  • 根据条件更改某些字符的HTML格式,例如为元音和辅音赋予不同的背景色,或突出显示每次出现的所选字符。据我了解,首先我需要将我的字符串分割成几行(以保留断点),然后将它们中的每一个变成一个由1个字符组成的块数组。对于输出,我将join()行退回。不幸的是,我找不到关于如何将HTML应用于数组值来解决诸如我的问题的任何想法。

很抱歉,如果我的帖子看起来太详细,我不想将我的问题分为几个主题,以便读者可以看到更大的图景。我刚刚开始学习PHP,因此我欢迎针对该应用程序逻辑的特定解决方案和建议。

我尝试过的

除了不知道该怎么做之外,我还遇到了一些小问题。这是我现在逐步执行的操作。

我通过邮寄方式收集一首诗。英文诗歌仅供参考。

文本示例:

We shall not cease from exploration 
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.

我编号了希望使评论更容易的步骤。


1。使用和不使用标签获取值

这是通过textarea提交后在htmlentities()中的外观:

$string = "We shall not cease from exploration<br /> And the end of all our exploring<br /> Will be to arrive where we started<br /> And know the place for the first time."

我如何输出换行符:

$poem = nl2br($string);

这里是不带标签的副本:

$droptags = strip_tags($poem);

2。计数字符

这是我对count_chars()的初步尝试,缺少计数循环:

$poem2array = preg_split('//u', $droptags, null, PREG_SPLIT_NO_EMPTY);
$unique_characters = array_unique($poem2array);

输出如下:

(
[0] => W
[1] => e
[2] => 
...
)

3。将行拆分为数组

分割成几行:

$lines = preg_split('<br />', $showtags);

我的问题是数组看起来像这样:

(
[0] => We shall not cease from exploration<
[1] => >
And the end of all our exploring<
[2] => >
Will be to arrive where we started<
[3] => >
And know the place for the first time.
)

我试图将文本拆分为嵌套数组。我知道它坏了,因为我只能得到最后一行。

foreach($lines as $line) {
      $line = preg_split('//u', $line, null, PREG_SPLIT_NO_EMPTY);
    }

4。 HTML样式

关于数组的HTML样式,我不知道。我的参考数组看起来像这样:

$vowels = array("a", "e", "i");
$consonants = array("b", "c", "d");

$fontcolor = array("vowels" => "blue",
                "consonants" => "orange");

感谢您提前发表评论。您对任何部分的输入都会有很大的帮助。当每个组件损坏时,很难构建某些东西。我以前仅尝试使用Python编写脚本,因此PHP可能会使我感到困惑。

P.S。如果您喜欢这首诗,那就是T.S.Eliot's Little Gidding。很好。

php html arrays string multibyte
1个回答
0
投票
  1. 计数字符

© www.soinside.com 2019 - 2024. All rights reserved.