pspell_check

(PHP 4 >= 4.0.2,PHP 5,PHP 7,PHP 8)

pspell_check检查单词

说明

pspell_check(PSpell\Dictionary $dictionary, string $word): bool

pspell_check() 检查单词的拼写。

参数

dictionary

一个 PSpell\Dictionary 实例。

word

要测试的单词。

返回值

如果拼写正确,则返回 true,否则返回 false

变更日志

版本 说明
8.1.0 现在 dictionary 参数期望一个 PSpell\Dictionary 实例;以前,期望一个 资源

示例

示例 #1 pspell_check() 示例

<?php
$pspell
= pspell_new("en");

if (
pspell_check($pspell, "testt")) {
echo
"这是一个有效的拼写";
} else {
echo
"抱歉,拼写错误";
}
?>

添加注释

用户贡献的注释 4 个注释

0
si at youbeenx dot com
19 年前
我觉得扩展使用此函数进行批处理拼写检查将有所帮助。先前发布的示例使用空格作为分隔符将每个单词串联起来。但是,在某些情况下,这样做不会返回期望的结果。例如,“Hello, I like coding.” 将返回一个包含两个问题的数组,“Hello,” 和“coding.”,这两个词拼写正确,但 pspell_check() 会认为它们拼写错误,因为逗号或句号与单词一起传递给函数。以下示例允许您将仅单词(使用正则表达式忽略句号或逗号等语法)提取到数组中,然后在返回字符串之前添加 html 字体标签以将所有拼写错误的单词突出显示为红色。

<?

函数 SpellCheck($string) {

$pspell_link = pspell_new("en");
preg_match_all("/[A-Z\']{1,16}/i", $string, $words);

for ($i = 0; $i < count($words[0]); $i++) {

if (!pspell_check($pspell_link, $words[0][$i])) {

$string = str_replace($words[0][$i], "<font color=\"#FF0000\">" . $words[0][$i] . "</font>", $string);

}

}

return $string;

}

?>
-3
digit6 at gmail dot com
7 年前
用于拆分查询词语的更好模式是

preg_match_all('/[^\w\']/+/', $query, $word)
// $words 包含词语。
-4
Jcart
18 年前
<?php

// 应该使用 explode 而不是 implode
//$word = implode(" ", $message);
$word = explode(" ", $message);
foreach(
$word as $k => $v) {
if (
pspell_check($pspell_link, $v)) {
echo
"拼写正确";
} else {
echo
"抱歉,拼写错误";
};
};

?>
-7
chris at candm dot org dot uk
19 年前
<?php
/*
我不得不编写这些例程来突出显示 WYSIWYG 编辑器中的拼写。
pspell() 在 HTML 标签和实体上抛出错误,所以此代码处理它们。
ClearSpell() 允许您在之后清除拼写检查标记。
*/
?>
<html>
<head>
<style>
acronym.spell
{
text-decoration:underline;
color:red;
cursor:help;
}
</style>
</head>
<body>
<?php
$t
= "<font color=blue>text herre &amp; some more</font>";
echo
"之前:$t";
$t = SpellCheck($t);
echo
"<hr>SpellCheck 之后: $t";
$t = ClearSpell($t);
echo
"<hr>ClearSpell 之后: $t";
?>
</body>
</html>

<?php

function SpellCheck($text)
{
//依赖 fnSpell() 函数
// 从 HTML 代码中提取文本。除了正常的单词分隔符外,HTML 标签
// 和 HTML 实体也充当单词分隔符

$pspell_link = pspell_new("en"); //0. 获取字典
$strings = explode(">", $text); //1. 以 '>' 为分隔符分割 $text,得到以 0 或 1 个 HTML 标签结尾的 $strings
$nStrings = count($strings);

for (
$cStrings=0; $cStrings < $nStrings; $cStrings++)
{
$string = $strings[$cStrings]; //2. 遍历步骤 1 中的每个字符串

if ($string =='')
continue;

$temp = explode('<', $string); //2.1 以 '>' 为分隔符分割 $strings 中的 $string,得到 $tag 和 $cdata
$tag = $temp[1];
$cdata = $temp[0];

$subCdatas = explode(";", $cdata); //2.2 以 ';' 为分隔符分割 &cdata,得到以 0 或 1 个 HTML 实体结尾的 $subcdatas
$nSubCdatas = count($subCdatas); //2.3 遍历步骤 2.2 中 $subcdatas 中的每个 $subCdata

for ($cSubCdatas = 0; $cSubCdatas < $nSubCdatas; $cSubCdatas++)
{
$subCdata = $subCdatas[$cSubCdatas];

if (
$subCdata == '')
continue;

$temp = explode('&', $subCdata); //2.3.1 以 '&' 为分隔符分割 $subCdata,得到 $subCdataEntity 和 $subCdataWithNoEntities
$subCdataEntity = $temp[1];
$subCdataWithNoEntities = $temp[0];
$subCdataWithNoEntities = fnSpell($pspell_link, $subCdataWithNoEntities); //2.3.2 对 $cdataWithNoEntities 进行拼写检查

if (!$subCdataEntity ) //2.3.3 将 $subCdataEntity、'&' 和 $cdataWithNoEntities 放回步骤 2.2 中的 $subCdata
$subCdata = $subCdataWithNoEntities;
else
$subCdata = $subCdataWithNoEntities. '&' . $subCdataEntity . ';' ;

$subCdatas[$cSubCdatas] = $subCdata; //2.3.4 将 $subCdata 放回 $subCdatas 数组中
}

$cdata = implode("", $subCdatas); //2.4 将 $subCdatas 数组重新组合成 $cdata

if ($tag) //2.5 将 $tag、'>' 和 $cdata 放回 $string
$string = $cdata . '<' . $tag . '>';
else
$string = $cdata;

$strings[$cStrings] = $string; //2.6 将 $string 放回 $strings 中的位置
}

$text = implode('', $strings); //3 将 $strings 重新组合成 $text
return $text;

}

function
fnSpell($pspell_link, $string)
{

preg_match_all("/[A-Z\']{1,16}/i", $string, $words);

for (
$i = 0; $i < count($words[0]); $i++)
{
$currentword = $words[0][$i];

if (!
pspell_check($pspell_link, $currentword))
{
$wordarray = pspell_suggest($pspell_link, $currentword);
$words = implode(', ', $wordarray);
$suggest = "<acronym class='spell' title='$words'>$currentword</acronym class='spell'>";
$string = str_replace($currentword, $suggest, $string);
}

}
return
$string;
}

function
ClearSpell($text)
{
$strings = explode(">", $text);
$nStrings = count($strings);

for (
$cStrings=0; $cStrings < $nStrings; $cStrings++)
{
$string = $strings[$cStrings];

if (
$string =='')
continue;

$temp = explode('<', $string);
$tag = $temp[1];
$cdata = $temp[0];

if (
strstr($tag, 'acronym') && strstr($tag, "class='spell'") )
$string = $cdata;
else
$string = $cdata . '<' . $tag . '>';

$strings[$cStrings] = $string;
}

$text = implode('', $strings);
return
$text;
}
?>
To Top