1

我有一个 15,000 行的 PHP 数组。我需要遍历每一行以生成一个 15,000 行的 Javascript 数组。PHP 数组的每一行有 5% 的机会包含一个或多个 HTML 特殊字符ó,我需要用等效的 javascript 十六进制替换它们。我需要注意和替换大约 50 个 HTML 特殊字符,所以我会使用str_replace(array_of_HTML_targets, array_of_hex_replacements, haystack). 是否更有效:

  1. 遍历 PHP 数组的每一行,搜索 & 符号,如果存在则进行搜索和替换(考虑到这仅适用于 5% 的行)
  2. 对整个数组执行搜索和替换
  3. 将数组连接成一个巨字符串,并在巨字符串上执行搜索和替换
  4. 其他想法?请明确说明

顺便说一句,15,000 PHP 数组的原因是这是一个数据可视化应用程序。

4

1 回答 1

4

由于您已经需要将 PHP 数据转储为字符串(可能是 JSON),因此您不妨处理最终字符串,如下所示:

$json = json_encode($your_php_array);
$unhtmlref = preg_replace_callback("/&#(x[0-9a-f]+|\d+);/",function($m) {
    if( $m[1][0] == "x") $m[1] = substr($m[1],1);
    else $m[1] = dechex($m[1]);
    return sprintf("\\u%04s",$m[1]);
},$json);

这是安全的,因为 HTML 字符代码在 JSON 字符串中没有任何特殊含义。

也就是说,我的 JavaScript“实用程序带”中有一个功能类似:

function unHTMLref(str) {
    // take a string and return it, with all HTML character codes parsed
    var div = document.createElement('div');
    div.innerHTML = str.replace(/</g,"&lt;");
    return div.firstChild.nodeValue;
}

所以基本上你可以在之前或之后解析。就个人而言,我更喜欢“之后”,因为它将一些“繁重的”工作转移到浏览器上,允许服务器做更重要的事情。

于 2013-11-01T14:33:43.180 回答