-1

私の目的

「著者名の入力」は、スペースとutf-8文字のみを入力してください。私のウェブサイトの言語はトルコ語で、トルコ語のアルファベットには英語以外の文字が含まれています。

私の奇妙な問題

この正規表現は rubular.com で機能し
ます 入力文字列: "SelimÇınar" 結果: 一致
入力文字列: "SelimÇınar 12" 結果:
正規表現と一致しない:/^[\p{L} ]+$/u

次に、私のウェブサイトにtrial.phpを作成し、以下のコードを実行しました

1

echo '<br /><br /><br />';
    $str ='Selim Cinar';
    if (!preg_match("/^[\p{L} ]+$/u", $str))
    {echo 'no, not only utf-8 letters and spaces';}
    else {$str.' yes utf-8 letters and spaces';}
echo '<br /><br /><br />';

上記のコードの結果<br />:ソース ページにタグのみを持つ空のページ

2

echo '<br /><br /><br />';
    $str ='Selim Çınar'; //includes Tr characters
    if (!preg_match("/^[\p{L} ]+$/u", $str))
    {echo 'no, not only utf-8 letters and spaces';}
    else {$str.' yes utf-8 letters and spaces';}
echo '<br /><br /><br />';

上記のコードの結果<br />:ソース ページにタグのみを持つ空のページ

3

コードソース: http://php.net/manual/en/function.ctype-alpha.php

    $str ='Selim Çınar'; //includes Tr characters
    $str =trim($str);
    $str = str_replace(' ', '', $str);
    setLocale(LC_CTYPE, 'TR_tr.UTF-8');
    if (ctype_alpha($str)) {echo 'yes utf-8 letters';}
    else {echo 'no, not only utf-8 letters';}

上記のコードの結果:いいえ、utf-8文字だけではありません

4

コードソース: http://php.net/manual/en/function.ctype-alpha.php

    $str ='Selim Cinar';
    $str =trim($str);
    $str = str_replace(' ', '', $str);
    setLocale(LC_CTYPE, 'TR_tr.UTF-8');
    if (ctype_alpha($str)) {echo 'yes utf-8 letters';}
    else {echo 'no, not only utf-8 letters';}

上記のコードの結果: はい utf-8 文字

私のphpinfo

PHP バージョン 5.4.10
Apache 2.0 ハンドラー
Apache API バージョン: 20051115
PCRE (Perl 互換正規表現) サポートが有効化されている
PCRE ライブラリ バージョン 8.20 2011-10-21

Trial.phpについて

Trial.php は純粋な php です。html ヘッダー宣言はありません。

私の質問

  1. ケース 1 とケース 2 で空のページが表示されるのはなぜですか {! 更新:以下のMikeMによって解決されました}
  2. ケース 3 で「SelimÇınar」が utf-8 として認識されないのはなぜですか? 私のコードは間違っていますか (setLocale一部かもしれません)?

アップデート

質問 1 は MikeM によって解決されます。

**質問 2 はまだ質問として存在します。

4

2 に答える 2

1

setlocaleまたはを使用しないutf8_decodeでください。php ソースファイルが UTF-8 で保存されていないという点で、問題は非常に単純です。これは、テキスト エディタによって異なります。

ファイルを正しく保存すると、次のように動作します。

$str = 'Selim Çınar'; //Since this is a string literal, its encoding is determined by
                     //how this source file was saved
if (preg_match("/^[\p{L} ]+$/u", $str)) {
    echo 'yes only utf-8 letters or spaces';
} else {
    echo 'no, not only utf-8 letters or spaces';
}
于 2013-03-29T12:04:52.303 に答える
1

$str正規表現が正常に一致し、elseブランチが実行されるため、ケース 1 と 2 の空のページのみが取得されますが、そこには何も表示echoされないため、何も出力されません。

2 番目の質問の答えがわかりません。setLocale私には問題ないように見えますが、その動作はシステムに依存しています。

于 2013-03-29T10:28:44.283 に答える