www.webdeveloper.com
Page 1 of 2 12 LastLast
Results 1 to 15 of 22

Thread: This preg_replace how do I use it with arrays ?

  1. #1
    Join Date
    May 2006
    Posts
    245

    This preg_replace how do I use it with arrays ?

    Hi,

    I have some data to find and replace from a string.

    The find and replace data is in a mysql table
    so I can easily extract it and build 2 arrays,
    or build an associated array

    ( I am not sure which, so I did both)

    PHP Code:
    $sql "SELECT word,replacement FROM theos order by word";
        
    $result mysql_query($sql) or die("Could NOT select words"mysql_error() );

        
    $words = array();
        
    $replacements= array();
        
    $words_reps = array();
        
    $new_words = array();
        
    $new_words_reps = array();
        
        while (
    $row mysql_fetch_assoc($result)) {
            
    extract($row);
            
    $words[] = $word;
            
    $replacements[] = $replacement.' ';
            
    $words_reps[$word] = $replacement ;
            } 
    The string to do the find and replace on is a sentence like this:

    $input_data =
    there is something about being the parent of a very small child a child who has not yet begun to form words that has exerted a subtle pressure on the way i think about language in general my investment in words is heavy and more or less literal in the sense that they are the means by which i make at least in theory my living since my son was born six months ago the first way in which my relationship with words has changed is this i haven't been able to get nearly enough of the words down on paper

    Now I could make that array:
    PHP Code:
    $input_data_arr explode(' '$input_data); 
    But I don't know if I need to.

    My FIND array $words
    looks like this:


    2
    a
    about
    access to
    across the
    advert
    advice
    ago
    agreement

    My REPLACE array $replacements
    looks like this:

    {2|two|only two}
    {a|some|a very|a definite|a specific|a particluar}
    {about|regarding|concerning|with regards to|in relation to|related to|pertaining to|on the subject of|when it comes to|in regards to|in regard to|with regard to|on the subject off|as regards to}
    {access to|usage of|use of|the means to access}
    {across the|around the|all over the|over the|through the|round the|all around the}
    {advert|advertisement|ad|offer|promotion|special offer|promo|campaign|deal|special promotion|special deal}
    {advice|guidance|suggestions|tips|assistance|information|help and advice|recommendations|help|aid|instruction|counsel}
    {ago|back|in the past|earlier|previously|previous|prior}
    {agreement|arrangement|contract|deal}


    AND THE associated array:

    ( Using this to list it:

    PHP Code:
    foreach($words_reps as $x=>$x_value) {
            echo 
    $x "-->" $x_value;
            echo 
    "<br>";
            } 
    2-->{2|two|only two}
    a-->{a|some|a very|a definite|a specific|a particluar}
    about-->{about|regarding|concerning|with regards to|in relation to|related to|pertaining to|on the subject of|when it comes to|in regards to|in regard to|with regard to|on the subject off|as regards to}
    access to-->{access to|usage of|use of|the means to access}
    across the-->{across the|around the|all over the|over the|through the|round the|all around the}
    advert-->{advert|advertisement|ad|offer|promotion|special offer|promo|campaign|deal|special promotion|special deal}
    advice-->{advice|guidance|suggestions|tips|assistance|information|help and advice|recommendations|help|aid|instruction|counsel}
    ago-->{ago|back|in the past|earlier|previously|previous|prior}
    agreement-->{agreement|arrangement|contract|deal}


    In order to use preg_replace(),
    I wanted to add some reg_exp so that when I search for

    "a" it does NOT get found in "about" but only as "a"

    ( maybe I should use a \b for word boundary ? )

    Anyway, I changed the FIND array to be:
    $new_words

    "/^2$/"
    "/^a$/"
    "/^about$/"
    "/^access to$/"
    "/^across the$/"
    "/^advert$/"
    "/^advice$/"
    "/^ago$/"
    "/^agreement$/"

    I also change the associated array:
    $new_words_reps:

    "/^2$/"-->{2|two|only two}
    "/^a$/"-->{a|some|a very|a definite|a specific|a particluar}
    "/^about$/"-->{about|regarding|concerning|with regards to|in relation to|related to|pertaining to|on the subject of|when it comes to|in regards to|in regard to|with regard to|on the subject off|as regards to}
    "/^access to$/"-->{access to|usage of|use of|the means to access}
    "/^across the$/"-->{across the|around the|all over the|over the|through the|round the|all around the}
    "/^advert$/"-->{advert|advertisement|ad|offer|promotion|special offer|promo|campaign|deal|special promotion|special deal}
    "/^advice$/"-->{advice|guidance|suggestions|tips|assistance|information|help and advice|recommendations|help|aid|instruction|counsel}
    "/^ago$/"-->{ago|back|in the past|earlier|previously|previous|prior}
    "/^agreement$/"-->{agreement|arrangement|contract|deal}


    OK !

    So now I want to use the preg_replace()

    BUT my question is - do I need to use the associated array
    or do I use the two FIND and REPLACE arrays

    Since these 2 arrays were generated from the same table, they have the same
    natural keys - does that keep them in step when replacing ?

    If I use the two arrays, I guess it should like this ...

    PHP Code:
    $new_data preg_replace($new_words,$replacements,$input_data); 

    If is the assocated array, I don't know how to write that !!

    Am I correct in thinking that the input can be a string ?
    Or does that need to be an array as well ?


    Sorry,
    A lot of questions .. but I am not sure how to do this !!

    Thanks for any help !


    .
    Last edited by jeddik; 11-19-2013 at 07:12 AM.
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

  2. #2
    Join Date
    Aug 2004
    Location
    Ankh-Morpork
    Posts
    19,387
    Take a look at my reply in your other thread to see how I used an associative array with the search regex as the key.
    "Please give us a simple answer, so that we don't have to think, because if we think, we might find answers that don't fit the way we want the world to be."
    ~ Terry Pratchett in Nation

    eBookworm.us

  3. #3
    Join Date
    Dec 2011
    Location
    Centurion, South Africa
    Posts
    795
    Looks like you're creating an automatic Thesaurus?
    JavaScript: Learn | Validate | Compact | bionoid

  4. #4
    Join Date
    May 2006
    Posts
    245
    Thanks for your reply.

    I will work with what to showed in the other thread and try and understand it
    with the example I used here.

    So - to answer my question - I should use the associative array
    which has both search and replace data in it ??

    If ı don't understand it, I'll ask again

    bionoid: yes it is a bit like that - should be helpful in classifiying the mountains of text data I am trying to deal with

    Thanks to both for your help !!

    .
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

  5. #5
    Join Date
    Dec 2011
    Location
    Centurion, South Africa
    Posts
    795
    I won't interfere with this as NogDog is already helping, but it does look seemingly similar to previous posts we've dealt with.
    Just one concern I have to both of you with the array based search and replaces, is that you could potentially overlap replaced words as it goes through your replacement arrays, possibly expanding the sentence unintentionally.

    2c
    JavaScript: Learn | Validate | Compact | bionoid

  6. #6
    Join Date
    Aug 2004
    Location
    Ankh-Morpork
    Posts
    19,387
    By using one array, you don't have to worry about the search terms in one array not matching up correctly with the replacement terms in a separate array.
    "Please give us a simple answer, so that we don't have to think, because if we think, we might find answers that don't fit the way we want the world to be."
    ~ Terry Pratchett in Nation

    eBookworm.us

  7. #7
    Join Date
    Dec 2011
    Location
    Centurion, South Africa
    Posts
    795
    The requirement in this thread seems more complex than in the other. As there are now multiple replacement phrases for the same word, so now you have to keep record of what has been used, and if you reach the end do you start with the first phrase again?
    JavaScript: Learn | Validate | Compact | bionoid

  8. #8
    Join Date
    May 2006
    Posts
    245
    The requirement in this thread seems more complex
    Yes, that is the reason for starting a new thread is that I realised that to accomplish my objective, I needed to have a more complex replacement.

    BUT actually everything inside the curly brackets can be considered as one replacement phrase.

    I actually just want "access to" to be replaced with "{access to|usage of|use of|the means to access}" that's all - nothing more complicated.

    ( But of course once replace - I don't want parts of it getting replaced again. )

    I have mixed the find/replacement data so that it is now:

    $words_reps = array(
    'John' => 'John: 123 Main St',
    'John Smith' => 'John Smith: 456 Elm St',
    'John J. Smith' => 'John J. Smith: 531 Park Ave',
    'a' => '{a|some|a very|a definite|a specific|a particluar}',
    'about' => '{about|regarding|concerning|with regards to}',
    'about to' => '{about to|nearly|on the point of|will|just about to}',
    'across the' => '{across the|around the|all over the|over the|through the|round the|all around the}'
    );



    And the input data is:

    $input_data = <<<EOD
    Testing 1, 2, 3. John Smith is about to be a jerk. He is John's friend and lives across the road John J. Smith is a good person, but John is living about 1 mile away !!! The end
    EOD;

    And this is my code:

    PHP Code:
    krsort($words_reps);
    foreach(
    $words_reps as $x=>$x_value) {
        echo 
    $x "-->" $x_value;
        echo 
    "<br>";
        } 


    foreach(
    $words_reps as $key => $val) {
        
    $regex '/(?<!'.preg_quote('{marker}''/').')'.preg_quote($key'/').'/i';
        
    $regexData[$regex] = '{marker}'.$val;
        }
            

    // The array_keys() function returns an array containing the keys.
    $new_data preg_replace(array_keys($regexData), $regexData$input_data);
    $new_data str_replace('{marker}'''$new_data);

    echo 
    "<br>This is the RESULT:<br><br>$new_data"

    The result shows that I DO have a problem -

    The "{marker}" seems to be getting replaced and
    things are getting double replaced ... I think.

    This is the RESULT:

    Testing 1, 2, 3. John Smith: 456 Elm St is {m{a|some|a very|a definite|a specific|a particluar}rker}{{m{a|some|a very|a definite|a specific|a particluar}rker}{{a|some|a very|a definite|a specific|a particluar}bout|reg{a|some|a very|a definite|a specific|a particluar}rding|concerning|with reg{a|some|a very|a definite|a specific|a particluar}rds to} to|ne{a|some|a very|a definite|a specific|a particluar}rly|on the point of|will|just {m{a|some|a very|a definite|a specific|a particluar}rker}{{a|some|a very|a definite|a specific|a particluar}bout|reg{a|some|a very|a definite|a specific|a particluar}rding|concerning|with reg{a|some|a very|a definite|a specific|a particluar}rds to} to} be {a|some|a very|a definite|a specific|a particluar} jerk. He is John: 123 Main St's friend {a|some|a very|a definite|a specific|a particluar}nd lives {m{a|some|a very|a definite|a specific|a particluar}rker}{{a|some|a very|a definite|a specific|a particluar}cross the|{a|some|a very|a definite|a specific|a particluar}round the|{a|some|a very|a definite|a specific|a particluar}ll over the|over the|through the|round the|{a|some|a very|a definite|a specific|a particluar}ll {a|some|a very|a definite|a specific|a particluar}round the} ro{a|some|a very|a definite|a specific|a particluar}d John J. Smith: 531 Park Ave is {a|some|a very|a definite|a specific|a particluar} good person, but John: 123 Main St is living {m{a|some|a very|a definite|a specific|a particluar}rker}{{a|some|a very|a definite|a specific|a particluar}bout|reg{a|some|a very|a definite|a specific|a particluar}rding|concerning|with reg{a|some|a very|a definite|a specific|a particluar}rds to} 1 mile {a|some|a very|a definite|a specific|a particluar}w{a|some|a very|a definite|a specific|a particluar}y !!! The end
    Can you see what I have got wrong ?

    Thanks.

    .
    Last edited by jeddik; 11-20-2013 at 06:45 AM.
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

  9. #9
    Join Date
    May 2006
    Posts
    245
    Hi,

    I seemed to have improved it a bit by using a marker that is not likely to be used
    anywhere 'XxX'

    So my code now is:

    PHP Code:
    krsort($words_reps);
    foreach(
    $words_reps as $x=>$x_value) {
        echo 
    $x "-->" $x_value;
        echo 
    "<br>";
        } 


    foreach(
    $words_reps as $key => $val) {
        
    $regex '/(?<!'.preg_quote('XxX''/').')'.preg_quote($key'/').'/i';
        
    $regexData[$regex] = 'XxX'.$val;
        }
            

    // The array_keys() function returns an array containing the keys.
    $new_data preg_replace(array_keys($regexData), $regexData$input_data);
    $new_data str_replace('XxX'''$new_data);

    echo 
    "<br>This is the RESULT:<br><br>$new_data"
    This is the RESULT:

    Testing 1, 2, 3. John Smith: 456 Elm St is {{{a|some|a very|a definite|a specific|a particluar}bout|reg{a|some|a very|a definite|a specific|a particluar}rding|concerning|with reg{a|some|a very|a definite|a specific|a particluar}rds to} to|ne{a|some|a very|a definite|a specific|a particluar}rly|on the point of|will|just {{a|some|a very|a definite|a specific|a particluar}bout|reg{a|some|a very|a definite|a specific|a particluar}rding|concerning|with reg{a|some|a very|a definite|a specific|a particluar}rds to} to} be {a|some|a very|a definite|a specific|a particluar} jerk. He is John: 123 Main St's friend {a|some|a very|a definite|a specific|a particluar}nd lives {{a|some|a very|a definite|a specific|a particluar}cross the|{a|some|a very|a definite|a specific|a particluar}round the|{a|some|a very|a definite|a specific|a particluar}ll over the|over the|through the|round the|{a|some|a very|a definite|a specific|a particluar}ll {a|some|a very|a definite|a specific|a particluar}round the} ro{a|some|a very|a definite|a specific|a particluar}d John J. Smith: 531 Park Ave is {a|some|a very|a definite|a specific|a particluar} good person, but John: 123 Main St is living {{a|some|a very|a definite|a specific|a particluar}bout|reg{a|some|a very|a definite|a specific|a particluar}rding|concerning|with reg{a|some|a very|a definite|a specific|a particluar}rds to} 1 mile {a|some|a very|a definite|a specific|a particluar}w{a|some|a very|a definite|a specific|a particluar}y !!! The end
    The last word should be "away"

    But I get "{a|some|a very|a definite|a specific|a particluar}w{a|some|a very|a definite|a specific|a particluar}y"

    To stop this happening do I need the \b for word boundary somewhere ?

    If so ... where ?

    Thanks



    .
    Last edited by jeddik; 11-20-2013 at 07:50 AM.
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

  10. #10
    Join Date
    Dec 2011
    Location
    Centurion, South Africa
    Posts
    795
    Sorry, have been away for the last couple days.

    As mentioned before you have overlaps on the replacements, not just with the word "away" but also the word "about" in one of the initial replacements.
    I did one as well for you to look at, I have used the boundary option in the regular expression as well:

    PHP Code:
    <?php

        $input_data 
    "Testing 1, 2, 3. John Smith is about to be a jerk. He is John's friend and lives across the road John J. Smith is a good person, but John is living about 1 mile away !!! The end";
        
    $words_reps = array(
            
    'John' => 'John: 123 Main St',
            
    'John Smith' => 'John Smith: 456 Elm St',
            
    'John J. Smith' => 'John J. Smith: 531 Park Ave',
            
    'a' => '{a|some|a very|a definite|a specific|a particluar}',
            
    'about' => '{about|regarding|concerning|with regards to}',
            
    'about to' => '{about to|nearly|on the point of|will|just about to}',
            
    'across the' => '{across the|around the|all over the|over the|through the|round the|all around the}'
        
    );

        echo 
    '<p>-- Original --<br />' $input_data '</p>';

        
    $sets = array();
        foreach (
    $words_reps as $i => $j) {
            
    $sets[count(explode(' '$i))][$i] = $j;
        }
        
    krsort($setsSORT_NUMERIC);

        
    $words = array();
        foreach (
    $sets as $set) {foreach ($set as $word => $replace) {
            
    $word_index '{WORD_' count($words) . '}';
            
    $input_data preg_replace('/\b' preg_quote($word'/') . '\b/'$word_index$input_data);
            
    $words[$word_index] = $replace;
        }}

        echo 
    '<p>-- Markers --<br />' $input_data '</p>';

        foreach (
    $words as $i => $j) {
            
    $input_data str_replace($i$j$input_data);
        }

        echo 
    '<p>-- Final --<br />' $input_data '</p>';

    ?>
    Output

    Code:
    -- Original --
    Testing 1, 2, 3. John Smith is about to be a jerk. He is John's friend and lives across the road John J. Smith is a good person, but John is living about 1 mile away !!! The end
    
    -- Markers --
    Testing 1, 2, 3. {WORD_1} is {WORD_2} be {WORD_5} jerk. He is {WORD_4}'s friend and lives {WORD_3} road {WORD_0} is {WORD_5} good person, but {WORD_4} is living {WORD_6} 1 mile away !!! The end
    
    -- Final --
    Testing 1, 2, 3. John Smith: 456 Elm St is {about to|nearly|on the point of|will|just about to} be {a|some|a very|a definite|a specific|a particluar} jerk. He is John: 123 Main St's friend and lives {across the|around the|all over the|over the|through the|round the|all around the} road John J. Smith: 531 Park Ave is {a|some|a very|a definite|a specific|a particluar} good person, but John: 123 Main St is living {about|regarding|concerning|with regards to} 1 mile away !!! The end
    Hope that's what you're looking for
    Last edited by bionoid; 11-21-2013 at 06:09 AM.
    JavaScript: Learn | Validate | Compact | bionoid

  11. #11
    Join Date
    May 2006
    Posts
    245
    Hi.

    Thanks a ton !

    Now I was already re-testing my changes to Nogdog's suggestion

    I had tried this:

    PHP Code:
    krsort($words_reps);
    foreach(
    $words_reps as $x=>$x_value) {
        echo 
    $x "-->" $x_value;
        echo 
    "<br>";
        } 

    foreach(
    $words_reps as $key => $val) {
        
    $regex '/(?<!'.preg_quote('XxX''/').')'.'/\b'.preg_quote($key'/').'/\b'.'/i';
        
    $regexData[$regex] = 'XxX'.$val;
           }
        
    // The array_keys() function returns an array containing the keys.
    $new_data preg_replace(array_keys($regexData), $regexData$input_data);
    $new_data str_replace('XxX'''$new_data);

    echo 
    "<br>This is the RESULT:<br><br>$new_data"
    I have added .'/\b'. before and after the key of $words_reps
    That should be the "a" or "about" etc.

    But I get an error:
    Warning: preg_replace(): Unknown modifier '\' in /home/coje66/public_html/auto_pre_spin.php on line 90
    Line 90 is :

    PHP Code:
    $new_data preg_replace(array_keys($regexData), $regexData$input_data); 
    So ...
    not sure what happened


    Hi Bionoid.

    Yes that works great -
    I don't fully understand it

    Not sure why we are counting those keys ??

    I will work through it.

    Would like to get Nogdog's suggestion running if possible
    first as I understand it but think it just needs the boundary to
    make it work !!


    Thanks

    .
    Last edited by jeddik; 11-21-2013 at 07:37 AM.
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

  12. #12
    Join Date
    Aug 2004
    Location
    Ankh-Morpork
    Posts
    19,387
    That error is because you have a "/" before your "\b", and "/" is your regexp delimiter. Not sure if you really mean to have it there, but if you do want a literal "/", you will have to escape it (or else use a different delimiter).
    "Please give us a simple answer, so that we don't have to think, because if we think, we might find answers that don't fit the way we want the world to be."
    ~ Terry Pratchett in Nation

    eBookworm.us

  13. #13
    Join Date
    May 2006
    Posts
    245
    OK

    Thanks - I thought I needed to escape the \ character so I put that / in


    actually I saw it in bionoid's code:

    $input_data = preg_replace('/\b' . preg_quote($word, '/') . '\b/', $word_index, $input_data);

    Now I have taken them out it runs better, but not perfect.

    My code is now:
    PHP Code:
    krsort($words_reps);
    foreach(
    $words_reps as $x=>$x_value) {
        echo 
    $x "-->" $x_value;
        echo 
    "<br>";
        } 

    foreach(
    $words_reps as $key => $val) {
        
    $regex '/(?<!'.preg_quote('XxX''/').')'.'\b'.preg_quote($key'/').'\b'.'/i';
        
    $regexData[$regex] = 'XxX'.$val;
        } 
    This is the RESULT:

    Testing 1, 2, 3. John Smith: 456 Elm St is {{about|regarding|concerning|with regards to} to|nearly|on the point of|will|just {about|regarding|concerning|with regards to} to} be {a|some|a very|a definite|a specific|a particluar} jerk. He is John: 123 Main St's friend and lives {across the|around the|all over the|over the|through the|round the|all around the} road John J. Smith: 531 Park Ave is {a|some|a very|a definite|a specific|a particluar} good person, but John: 123 Main St is living {about|regarding|concerning|with regards to} 1 mile away !!! The end
    The first replacement has a problem, the rest are OK

    strange ???


    .
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

  14. #14
    Join Date
    May 2006
    Posts
    245
    Its OK - got it working now.

    Thanks again for helping


    .
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

  15. #15
    Join Date
    May 2006
    Posts
    245
    Hi again.

    I have been using this little script to apply names and addresses
    but still have a problem ...

    The replacing is occurring again with already replaced sets of data.

    For example I have slightly extended the test data from above:

    It is now:

    $words_reps = array(
    'john' => '{John: 123 Main St}',
    'now' => '{now|right now|just now}',
    'is' => '{is|really is|most certainly is}',
    'special' => '{special|really special|very special}',
    'this' => '{this|this thing|this unique}',
    'this is' => '{this is|this wretched|this is hell}',
    'john smith' => '{John Smith: 456 Elm St|John B Smith: 456 Elm St}',
    'john j. smith' => '{John J. Smith: 531 Park Ave}',
    'a' => '{a|some|a very|a definite|a specific|a particluar}',
    'about' => '{about|regarding|concerning|with regards to}',
    'test' => '{test|examination|in depth look|research project}',
    'about to' => '{about to|nearly|on the point of|will|just about to}',
    'across the' => '{across the|around the|all over the|over the|through the|round the|all around the}'
    );
    This is the RESULT:

    {now|right now|just now} {{this|this thing|this unique} {is|really is|most certainly is}|{this|this thing|this unique} wretched|{this|this thing|this unique} {is|really is|most certainly is} hell} {a|some|a very|a definite|a specific|a particluar} {special|really special|very special} {test|examination|in depth look|research project} and {is|really is|most certainly is} all {about|regarding|concerning|with regards to} {John: 123 Main St} and his friends johns like {{John: 123 Main St} Smith: 456 Elm St|{John: 123 Main St} B Smith: 456 Elm St} {is|really is|most certainly is} {now|right now|just now} to be {a|some|a very|a definite|a specific|a particluar} jerk. and {{this|this thing|this unique} {is|really is|most certainly is}|{this|this thing|this unique} wretched|{this|this thing|this unique} {is|really is|most certainly is} hell} another {test|examination|in depth look|research project} to find out what {this|this thing|this unique} thing {is|really is|most certainly is} all {about|regarding|concerning|with regards to}. we need to understand what we can do with {this|this thing|this unique}. he {is|really is|most certainly is} {John: 123 Main St}'s friend and lives {across the|around the|all over the|over the|through the|round the|all around the} road {{John: 123 Main St} J. Smith: 531 Park Ave} {is|really is|most certainly is} {a|some|a very|a definite|a specific|a particluar} good person, but {John: 123 Main St} {is|really is|most certainly is} living {about|regarding|concerning|with regards to} 1 mile away !!! the end


    When there is a replacable name within an already replaced name and address
    then it gets replaced again.

    Like this:

    {{John: 123 Main St} Smith: 456 Elm St|{John: 123 Main St} B Smith: 456 Elm St}

    That should have been:

    {John Smith: 456 Elm St|John B Smith: 456 Elm St}.

    ACTUALLY ...

    The same problem occurs in the text as well:

    {{this|this thing|this unique} {is|really is|most certainly is}|{this|this thing|this unique} wretched|{this|this thing|this unique} {is|really is|most certainly is} hell}

    That should have been simply:

    {this is|this wretched|this is hell}

    How can I stop this nesting of replacements ?

    Thanks.
    Last edited by jeddik; 12-04-2013 at 07:02 AM.
    Developers Choice Revealed:
    www.devchoice.info
    Which host has won, and why ?

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles