spellchecker.php
上传用户:ah_jiwei
上传日期:2022-07-24
资源大小:54044k
文件大小:6k
源码类别:

数据库编程

开发平台:

Visual C++

  1. <?php
  2. header('Content-type: text/html; charset=utf-8');
  3. // The following variables values must reflect your installation needs.
  4. $aspell_prog = '"C:Program FilesAspellbinaspell.exe"'; // by FredCK (for Windows)
  5. //$aspell_prog = 'aspell'; // by FredCK (for Linux)
  6. $lang = 'en_US';
  7. $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt"; // by FredCK
  8. $tempfiledir = "./";
  9. $spellercss = '../spellerStyle.css'; // by FredCK
  10. $word_win_src = '../wordWindow.js'; // by FredCK
  11. $textinputs = $_POST['textinputs']; # array
  12. $input_separator = "A";
  13. # set the JavaScript variable to the submitted text.
  14. # textinputs is an array, each element corresponding to the (url-encoded)
  15. # value of the text control submitted for spell-checking
  16. function print_textinputs_var() {
  17. global $textinputs;
  18. foreach( $textinputs as $key=>$val ) {
  19. # $val = str_replace( "'", "%27", $val );
  20. echo "textinputs[$key] = decodeURIComponent("" . $val . "");n";
  21. }
  22. }
  23. # make declarations for the text input index
  24. function print_textindex_decl( $text_input_idx ) {
  25. echo "words[$text_input_idx] = [];n";
  26. echo "suggs[$text_input_idx] = [];n";
  27. }
  28. # set an element of the JavaScript 'words' array to a misspelled word
  29. function print_words_elem( $word, $index, $text_input_idx ) {
  30. echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';n";
  31. }
  32. # set an element of the JavaScript 'suggs' array to a list of suggestions
  33. function print_suggs_elem( $suggs, $index, $text_input_idx ) {
  34. echo "suggs[$text_input_idx][$index] = [";
  35. foreach( $suggs as $key=>$val ) {
  36. if( $val ) {
  37. echo "'" . escape_quote( $val ) . "'";
  38. if ( $key+1 < count( $suggs )) {
  39. echo ", ";
  40. }
  41. }
  42. }
  43. echo "];n";
  44. }
  45. # escape single quote
  46. function escape_quote( $str ) {
  47. return preg_replace ( "/'/", "\'", $str );
  48. }
  49. # handle a server-side error.
  50. function error_handler( $err ) {
  51. echo "error = '" . escape_quote( $err ) . "';n";
  52. }
  53. ## get the list of misspelled words. Put the results in the javascript words array
  54. ## for each misspelled word, get suggestions and put in the javascript suggs array
  55. function print_checker_results() {
  56. global $aspell_prog;
  57. global $aspell_opts;
  58. global $tempfiledir;
  59. global $textinputs;
  60. global $input_separator;
  61. $aspell_err = "";
  62. # create temp file
  63. $tempfile = tempnam( $tempfiledir, 'aspell_data_' );
  64. # open temp file, add the submitted text.
  65. if( $fh = fopen( $tempfile, 'w' )) {
  66. for( $i = 0; $i < count( $textinputs ); $i++ ) {
  67. $text = urldecode( $textinputs[$i] );
  68. $lines = explode( "n", $text );
  69. fwrite ( $fh, "%n" ); # exit terse mode
  70. fwrite ( $fh, "^$input_separatorn" );
  71. fwrite ( $fh, "!n" ); # enter terse mode
  72. foreach( $lines as $key=>$value ) {
  73. # use carat on each line to escape possible aspell commands
  74. fwrite( $fh, "^$valuen" );
  75. }
  76. }
  77. fclose( $fh );
  78. # exec aspell command - redirect STDERR to STDOUT
  79. $cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1";
  80. if( $aspellret = shell_exec( $cmd )) {
  81. $linesout = explode( "n", $aspellret );
  82. $index = 0;
  83. $text_input_index = -1;
  84. # parse each line of aspell return
  85. foreach( $linesout as $key=>$val ) {
  86. $chardesc = substr( $val, 0, 1 );
  87. # if '&', then not in dictionary but has suggestions
  88. # if '#', then not in dictionary and no suggestions
  89. # if '*', then it is a delimiter between text inputs
  90. # if '@' then version info
  91. if( $chardesc == '&' || $chardesc == '#' ) {
  92. $line = explode( " ", $val, 5 );
  93. print_words_elem( $line[1], $index, $text_input_index );
  94. if( isset( $line[4] )) {
  95. $suggs = explode( ", ", $line[4] );
  96. } else {
  97. $suggs = array();
  98. }
  99. print_suggs_elem( $suggs, $index, $text_input_index );
  100. $index++;
  101. } elseif( $chardesc == '*' ) {
  102. $text_input_index++;
  103. print_textindex_decl( $text_input_index );
  104. $index = 0;
  105. } elseif( $chardesc != '@' && $chardesc != "" ) {
  106. # assume this is error output
  107. $aspell_err .= $val;
  108. }
  109. }
  110. if( $aspell_err ) {
  111. $aspell_err = "Error executing `$cmd`\n$aspell_err";
  112. error_handler( $aspell_err );
  113. }
  114. } else {
  115. error_handler( "System error: Aspell program execution failed (`$cmd`)" );
  116. }
  117. } else {
  118. error_handler( "System error: Could not open file '$tempfile' for writing" );
  119. }
  120. # close temp file, delete file
  121. unlink( $tempfile );
  122. }
  123. ?>
  124. <html>
  125. <head>
  126. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  127. <link rel="stylesheet" type="text/css" href="<?php echo $spellercss ?>" />
  128. <script language="javascript" src="<?php echo $word_win_src ?>"></script>
  129. <script language="javascript">
  130. var suggs = new Array();
  131. var words = new Array();
  132. var textinputs = new Array();
  133. var error;
  134. <?php
  135. print_textinputs_var();
  136. print_checker_results();
  137. ?>
  138. var wordWindowObj = new wordWindow();
  139. wordWindowObj.originalSpellings = words;
  140. wordWindowObj.suggestions = suggs;
  141. wordWindowObj.textInputs = textinputs;
  142. function init_spell() {
  143. // check if any error occured during server-side processing
  144. if( error ) {
  145. alert( error );
  146. } else {
  147. // call the init_spell() function in the parent frameset
  148. if (parent.frames.length) {
  149. parent.init_spell( wordWindowObj );
  150. } else {
  151. alert('This page was loaded outside of a frameset. It might not display properly');
  152. }
  153. }
  154. }
  155. </script>
  156. </head>
  157. <!-- <body onLoad="init_spell();"> by FredCK -->
  158. <body onLoad="init_spell();" bgcolor="#ffffff">
  159. <script type="text/javascript">
  160. wordWindowObj.writeBody();
  161. </script>
  162. </body>
  163. </html>