翻訳モジュール
序章
私のコードはこれまでのところ機能していますが、これが私が望むものを実装する適切な方法であるかどうかはわかりません。Web ページの文字列を翻訳する小さな関数があります。番号で呼び出すと、1 つのテーブルで ID が検索され、そのページを対象としている場合にのみ表示されます。文字列で呼び出すと、別のテーブルで文字列が検索され、文字列が存在しない場合、関数は渡された文字列を出力し、「_」をスペースに置き換えて警告します。
正しく実装されているかどうか知りたいことが 2 つあります (前述のとおり、動作しますが、良いアイデアかどうかはわかりません)。しかし、最初のコード。
コード
// Function to output language strings.
function text($Id)
{
// Already defined and tested that are valid (sql injection avoided also)
global $Lang;
global $FullUrl;
if (is_int($Id)) // If a number is being passed
{
$results = mysql_query("SELECT * FROM translations WHERE id='$Id' AND page='$FullUrl'") or die ('Could not query:' . mysql_error());
$row = mysql_fetch_assoc($results);
if (!empty($row[$Lang])) echo $row[$Lang]; // If there is some, echo it
else error($FullUrl,$Lang); // Else, calls error function
}
else // If a string is being passed
{
$results = mysql_query("SELECT * FROM htranslations WHERE keyword='$Id'") or die ('Could not query:' . mysql_error());
$row = mysql_fetch_assoc($results);
if (!empty($row[$Lang])) echo $row[$Lang]; // If it exists in the table, echo it
else // Else (it doesn't exist)
{
$NewId = str_replace("_", " ", $Id); // Replace the "_" with " "
echo "<span style='color: red;' title='"; // Set a red color (warning)
text(Wrong_sentence); // Call this function and echo "This sentence could be wrong"
echo "'>".$NewId."</span>"; // Echo the passed string with spaces
error($FullUrl,$Lang,$Id);
}
}
}
1. echo は関数の内側と外側のどちらが良いですか?
私はすでにこの質問を読んでおり、文字列をさらに操作するつもりはありません。したがって、その投稿から、最善のアイデアは、私がすでに行ったように、関数内でエコーすることだと推測していますが、まだ確信が持てないので、この特定のケースについてあなたの意見を知りたいです. 値を返してその値をエコーするか、関数からエコーする方がよいでしょうか? なんで?私の質問は、パフォーマンスとコードを使いやすくすることに焦点を当てています。
2. この関数を関数内から呼び出すのは危険ですか?
ご覧のとおり、私が書いた最後の行の 1 つでtext(Wrong_sentence);
. 別の関数から関数を呼び出すことができることは知っていますが、同じ関数から関数を呼び出すことはできますか? Wrong_sentence
たとえば、 table キーワードが削除または変更された場合など、自分自身を呼び出す無限ループに入るのではないかと心配しています。また、そこにある可能性のある他のセキュリティへの影響についても認識していません。
コードに関する他の種類のフィードバックは大歓迎です!!