首页  >  文章  >  后端开发  >  如何在PHP中转换各种智能引号?

如何在PHP中转换各种智能引号?

Susan Sarandon
Susan Sarandon原创
2024-10-22 06:53:30392浏览

How Can I Convert Various Smart Quotes in PHP?

在 PHP 中转换各种智能引号

智能引号是标准引号的常见变体,在排版中用于增强可读性和美观性文字的吸引力。为了确保在处理文本时将这些智能引号正确转换为常规引号,必须考虑在不同上下文中使用的各种智能引号字符。

改进的智能引号转换功能:

以下增强功能通过合并各种智能引号字符的全面映射来解决您提供的原始功能的缺点。它利用字符映射 ($chr_map) 和预先计算的数组($chr 和 $rpl)来实现最佳效率:

<code class="php">$chr_map = array(
    "\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

    "\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
);

$chr = array_keys($chr_map); // but: for efficiency you should
$rpl = array_values($chr_map); // pre-calculate these two arrays
$str = str_replace($chr, $rpl, html_entity_decode($str, ENT_QUOTES, "UTF-8"));</code>

此改进的函数采用符合 Unicode 的方法,涵盖了全面的范围智能引号字符。通过利用预先计算的数组,它保持高效率,同时确保智能报价准确转换为标准报价。

其他注意事项:

  • 编码检测:如果输入编码不确定,请在应用上述函数之前使用 utf8_encode() 确保 UTF-8 编码。
  • 标准化 Windows 代码页 1252:对于可能源自 Windows 代码页 1252 的文本,请考虑使用标准化映射将特定代码点转换为其 Unicode 等效项。
  • Unicode 字符属性:使用字符属性可以进一步增强智能引号处理,但它们在正则表达式中的可用性有限。

以上是如何在PHP中转换各种智能引号?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn