Home  >  Article  >  Backend Development  >  How to Effectively Convert Smart Quotes in PHP: A Comprehensive Guide

How to Effectively Convert Smart Quotes in PHP: A Comprehensive Guide

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-22 06:55:30923browse

How to Effectively Convert Smart Quotes in PHP: A Comprehensive Guide

Convert Smart Quotes in PHP: A Comprehensive Guide

In PHP, handling smart quotes can be a complex task. The following improved function ensures comprehensive conversion of all types of smart quotes to regular quotes:

<code class="php">function convert_smart_quotes($string)
{
    $unicode_map = array(
        "\xC2\xAB"     => "'", // U+00AB left-pointing double angle quotation mark
        "\xC2\xBB"     => "'", // U+00BB right-pointing double angle quotation mark
        "\xE2\x80\x98" => "'", // U+2018 left single quotation mark
        "\xE2\x80\x99" => "'", // U+2019 right single quotation mark
        "\xE2\x80\x9A" => "'", // U+201A single low-9 quotation mark
        "\xE2\x80\x9B" => "'", // U+201B single high-reversed-9 quotation mark
        "\xE2\x80\x9C" => '"', // U+201C left double quotation mark
        "\xE2\x80\x9D" => '"', // U+201D right double quotation mark
        "\xE2\x80\x9E" => '"', // U+201E double low-9 quotation mark
        "\xE2\x80\x9F" => '"', // U+201F double high-reversed-9 quotation mark
        "\xE2\x80\xB9" => "'", // U+2039 single left-pointing angle quotation mark
        "\xE2\x80\xBA" => "'", // U+203A single right-pointing angle quotation mark

        // Windows codepage 1252
        "\xC2\x82" => "'", // U+0082⇒U+201A single low-9 quotation mark
        "\xC2\x84" => '"', // U+0084⇒U+201E double low-9 quotation mark
        "\xC2\x8B" => "'", // U+008B⇒U+2039 single left-pointing angle quotation mark
        "\xC2\x91" => "'", // U+0091⇒U+2018 left single quotation mark
        "\xC2\x92" => "'", // U+0092⇒U+2019 right single quotation mark
        "\xC2\x93" => '"', // U+0093⇒U+201C left double quotation mark
        "\xC2\x94" => '"', // U+0094⇒U+201D right double quotation mark
        "\xC2\x9B" => "'" // U+009B⇒U+203A single right-pointing angle quotation mark
    );

    // Map special HTML entities
    $html_entities = array(
        "&amp;#8216;" => "'", // left single quotation mark
        "&amp;#8217;" => "'", // right single quotation mark
        "&amp;#8220;" => '"', // left double quotation mark
        "&amp;#8221;" => '"' // right double quotation mark
    );

    // Map Windows CP1252 entities
    $windows_cp1252 = array(
        "&amp;lsquo;" => "'", // left single quotation mark
        "&amp;rsquo;" => "'", // right single quotation mark
        "&amp;ldquo;" => '"', // left double quotation mark
        "&amp;rdquo;" => '"', // right double quotation mark
        "&amp;mdash;" => ' - ', // em dash
        "&amp;ndash;" => '- ' // en dash
    );

    // Unicode first
    $string = str_replace(
        array_keys  ($unicode_map),
        array_values($unicode_map),
        html_entity_decode($string, ENT_QUOTES, "UTF-8")
    );

    // Windows CP1252 next
    $string = str_replace(
        array_keys  ($windows_cp1252),
        array_values($windows_cp1252),
        $string
    );

    // Finally, HTML entities
    $string = str_replace(
        array_keys  ($html_entities),
        array_values($html_entities),
        $string
    );

    return $string;
}</code>

This function handles all Unicode standards, Windows codepage 1252, and HTML entities for smart quotes. It ensures that all types of smart quotes are converted accurately to regular quotes, providing a comprehensive solution for quote conversion in PHP.

The above is the detailed content of How to Effectively Convert Smart Quotes in PHP: A Comprehensive Guide. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn