web-dev-qa-db-ja.com

Sanitize_title_with_dashesフォーマット関数は自由度が高すぎますか(受け取られた文字に関して)?

sanitize_title_with_dashes(参考のために下記のコードを参照)はWordpressが "かわいい" URLをフォーマットするために使用する関数です。ただし、関数のコメントヘッダーとは反対に、英数字、アンダースコア(_)、ダッシュ( - )以外の文字も使用できます。 °などの記号も使用できます。

英数字とダッシュだけを本当に許可するにはどうすればよいでしょうか。

/**
 * Sanitizes title, replacing whitespace with dashes.
 *
 * Limits the output to alphanumeric characters, underscore (_) and dash (-).
 * Whitespace becomes a dash.
 *
 * @since 1.2.0
 *
 * @param string $title The title to be sanitized.
 * @return string The sanitized title.
 */
function sanitize_title_with_dashes($title) {
    $title = strip_tags($title);
    // Preserve escaped octets.
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    // Remove percent signs that are not part of an octet.
    $title = str_replace('%', '', $title);
    // Restore octets.
    $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);

    $title = remove_accents($title);
    if (seems_utf8($title)) {
        if (function_exists('mb_strtolower')) {
            $title = mb_strtolower($title, 'UTF-8');
        }
        $title = utf8_uri_encode($title, 200);
    }

    $title = strtolower($title);
    $title = preg_replace('/&.+?;/', '', $title); // kill entities
    $title = str_replace('.', '-', $title);
    $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');

    return $title;
}
1
julien_c

この関数をおおまかなプレースホルダーとして考えてください。想像以上の欠陥があります…:)
さまざまな言語やニーズに合わせて変換を改善するためのプラグインはたくさんあります。これがどのように行われるのかを見るために私のプラグイン Germanix を見てください。

1
fuxia