首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 輸出轉義 JavaScript 字串函數實作

     編輯:PHP 綜合知識

需求背景

在 PHP 中輸出 JavaScript 程式碼或 JSON 資料時,必須妥善處理特殊字元(換行、引號、反斜線等),否則會導致 JS 語法錯誤或 XSS 風險。本文提供一個實用的 jsformat() 函數,將任意字串轉為安全的 JS 字串常值。

函數實作

<?php
function jsformat($str)
{
    $str = trim($str);
    // 合併連續空白
    $str = preg_replace('/\s+/', ' ', $str);
    // 移除換行符
    $str = str_replace(["\n", "\r"], '', $str);
    // 轉義反斜線(必須最先處理)
    $str = str_replace('\\', '\\\\', $str);
    // 轉義雙引號
    $str = str_replace('"', '\\"', $str);
    // 轉義單引號
    $str = str_replace("'", "\\'", $str);
    return $str;
}
?>

使用範例

<?php
$raw = 'He said: "Hello\nWorld" & it\'s great.';
$safe = jsformat($raw);
echo "<script> var msg = \"{$safe}\"; </script>";
// 輸出:var msg = "He said: \"HelloWorld\" & it\\'s great.";
?>

原理解析

  1. trim():移除首尾空白。
  2. preg_replace('/\s+/', ' ', $str):將連續空白(含 tab、換行)合併為單一空格,避免 JS 字串中出現不可見控制字元。
  3. str_replace(["\n", "\r"], '', ...):明確移除換行/回車,防止字串跨行導致語法錯誤。
  4. 轉義順序關鍵:先轉義 \\,再處理引號,避免重複轉義。

現代替代方案

PHP 5.3+ 可直接使用 json_encode(),它自動處理所有 JS/JSON 轉義規則,且支援 Unicode:

<?php
$jsSafe = json_encode($raw, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
// 輸出含雙引號的合法 JS 字串常值,可直接嵌入 script 標籤
echo "<script> var msg = {$jsSafe}; </script>";
?>

建議: 新專案優先使用 json_encode(),僅在舊版環境或特殊格式需求時採用自訂函數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved